MySQL получает заказ, чтобы произойти до того, как группа - PullRequest
3 голосов
/ 08 ноября 2010

У меня есть три таблицы, и я просто покажу вам соответствующие столбцы здесь

Таблица: группы Столбцы: идентификатор_группы, имя.

Таблица: groups_to_message Столбцы: group_id, message_id

Таблица: сообщения Столбцы: message_id, создано (дата)

Мне нужно в основном найти последнее сообщение для каждой группы, без дублирующих групп.

Я пытался использовать группу следующим образом:

SELECT m.created, g.group_id 
FROM groupss as g 
JOIN group_to_message as gm ON (g.group_id = gm.group_id) 
JOIN messages as m 
GROUP BY g.group_id 
ORDER BY m.created DESC

Это вызывает успешную группировку, но выполняется до ORDER BY, поэтому перед сортировкой берется первый результат.

Любая помощь приветствуется.

Ответы [ 3 ]

3 голосов
/ 08 ноября 2010

Если я правильно читаю ваш вопрос, используйте MAX ().Это должно дать вам самый последний элемент для каждой группы

0 голосов
/ 08 ноября 2010

Это не проверено, но должно работать:

SELECT m.created, g.group_id 
FROM groups as g 
JOIN group_to_message as gm ON (g.group_id = gm.group_id) 
JOIN messages as m ON (gm.message_id = m.id)
GROUP BY g.group_id HAVING m.created = MAX(m.created)
0 голосов
/ 08 ноября 2010
SELECT  m.created, g.group_id
FROM    groupss g
JOIN    messages m
ON      m.id = 
        (
        SELECT  mi.id
        FROM    group_to_message gm
        JOIN    message mi
        ON      mi.message_id = gm.message_id
        WHERE   gm.group_id = g.group_id
        ORDER BY
                gm.group_id DESC, mi.created DESC
        LIMIT 1
        )
...