Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом, голова кипит уже / 13 сообщений из 13, страница 1 из 1
06.01.2014, 03:47:24
    #38518280
vodolazzzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
Доброй ночи|дня форумчане, всю голову сломал, никак не могу дойти до нужного результата

Есть две таблицы, одна с сообщениями, другая с пользователями
суть такова - выводить все последние сообщения из бесед пользователя, соответственно диалогов много => выводить последнее по каждому диалогу.

messages:

id user_from user_to text date ...1 vodolazzzz 3 zzz 1388281961 ...2 vasiliy 1 xxx 1388281953 ...3 kate 2 yyy 1388281945 ...4 vodolazzzz 3 ppp 1388281254 ...5 vasiliy 1 еее 1388281222 ...

users:

user_id name email ...1 vodolazzzz vodolazzzz@bk.ru ...2 vasiliy vasiliy75@mail.ru ...3 kate ilovemammy@inbox.ru ...

Выборку с группировкой для каждого пользователя делаю примерно так:

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT p.id, p.user_to, p.user_from, p.date, p.text, u.user_id 
		FROM messages p
		LEFT JOIN users u ON u.name = p.user_from
		WHERE (p.user_to = '{$my_id}') OR (p.user_from = '{$my_name'}') 
		GROUP BY  p.user_from, p.user_to
		ORDER BY p.date DESC



Помогите как их теперь обьединить.
Надеюсь на вашу помощь.
...
Рейтинг: 0 / 0
06.01.2014, 09:08:19
    #38518300
Помогите с запросом, голова кипит уже
а перед тем, как постить на форум не пробовал поднять свою кипящую голову и почитать F.A.Q.-и и закрепленные на верху топики?
Там же в аккурат есть ответ на твой вопрос: FAQ: Выборка первой/последней записи в группах
...
Рейтинг: 0 / 0
06.01.2014, 16:35:47
    #38518530
vodolazzzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
Спасибо за ответ, я читал этот топик, но это не то - это уже ПОСЛЕ группировки выборка последней записи.
Мне же нужно их для начала как то правильно сгруппировать, но моих знаний в SQL не хватает.
...
Рейтинг: 0 / 0
06.01.2014, 16:39:31
    #38518533
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
vodolazzzzдиалогов многоЧто такое "диалог" в терминах ваших таблиц?
...
Рейтинг: 0 / 0
06.01.2014, 16:51:14
    #38518550
vodolazzzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
miksoft

Диалог - это переписка двух людей, то есть

user_from -> user_tovodolazzzz3

и в обратку

user_from -> user_toKate1

Запрос, который предоставлял я выше - группирует все сообщения от пользователя ко мне и от меня к пользователю,
осталось вот только их объединить и выбрать из них последнюю запись по дате и чья она была.
...
Рейтинг: 0 / 0
06.01.2014, 22:09:48
    #38518781
Помогите с запросом, голова кипит уже
vodolazzzzя читал этот топик, но это не то - это уже ПОСЛЕ группировки выборка последней записи.Значит плохо читал.
К примеру, варианты на not-exists-подзапросах или на left join-ах вообще не содержат группировок, но задачу выборки первой/последней записи в группе - успешно решают.
...
Рейтинг: 0 / 0
06.01.2014, 22:12:40
    #38518784
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
Открутите голову тому альтернативно мыслящему существу, которое в таблице messages адресата сделало идентификатором, а отправителя - именем-текстовкой. Это для начала.
Далее - если нужно последнее для ДИАЛОГА, то группить надо по ДИАЛОГУ.
Если бы у тебя была нормальная человеческая структура, то это была бы группировка по, скажем, (min(id_from, id_to), max(id_from, id_to)). А в текущей дебильной структуре то же придётся делать с изрядными извращениями - прикрутить таблицу юзеров и получить сравнимые категории для группировки.
Впрочем, куда ты нафиг денешься? делай...
...
Рейтинг: 0 / 0
07.01.2014, 21:13:39
    #38519194
vodolazzzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
Добрый Э - Эх , задача выборки первой-последней, это вторичная задача, не решив главную, к ней приступать не стоит.

Akina , спасибо вам за понимание, это ужас иметь такую структуру и по возможности я бы ёё создателям руки поотрывал, но что имеем, то имеем (

Left join'ом добился вывода id - вместо имени, это видно из первого запроса - user_id.


Akinaгруппить надо по ДИАЛОГУ.

Этого я и пытаюсь добиться(

Akinaполучить сравнимые категории для группировки

Если не сложно объяснить - что это?
...
Рейтинг: 0 / 0
07.01.2014, 21:53:11
    #38519211
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
vodolazzzzAkinaполучить сравнимые категории для группировки

Если не сложно объяснить - что это?
Связав две таблицы, вместо пары (txt_user_from - id_user_to) получить либо два ID, либо два TXT. А дальше группить как я показал выше.
...
Рейтинг: 0 / 0
08.01.2014, 05:08:00
    #38519358
vodolazzzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
Akira, Спасибо, что отвечаете, но как я писал выше - пары я добился, сделав джоин таблицы пользователей и вытащив оттуда id пользователя вместо name.

По вашему запросу группировки мускул ругается на синтаксис:

phpMyAdminYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' user_to), max(user_id, user_to)) LIMIT 0, 30' at line 5)

Собственно запрос:

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT p.id, p.user_to, p.user_from, p.date, p.text, u.user_id 
		FROM messages p
		LEFT JOIN users u ON u.name = p.user_from
		WHERE (p.user_to = 1) OR (p.user_from = 'vodolazzzz') 
		GROUP BY  min(user_id, user_to), max(user_id, user_to)
		ORDER BY p.date DESC
...
Рейтинг: 0 / 0
08.01.2014, 13:58:45
    #38519492
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
Есссно. Min и Max - групповые функции, и в GROUP BY появляться не могут. Изволь их проэмулировать (скажем, на основе CASE).
...
Рейтинг: 0 / 0
08.01.2014, 18:31:28
    #38519733
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
AkinaЕсссно. Min и Max - групповые функции, и в GROUP BY появляться не могут. Изволь их проэмулировать (скажем, на основе CASE). LEAST() и GREATEST() .
...
Рейтинг: 0 / 0
08.01.2014, 21:25:54
    #38519872
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, голова кипит уже
Точно - я вечно про них (и другие диалектозависимые) забываю...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом, голова кипит уже / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]