2016-09-06 1 views
0

Я уже посетил MySQL order by before group by для отдельной группы. Он работает нормально. У меня проблема с двумя группами по столбцам.MySQL: несколько групп по заказу Desc Order

У меня есть таблица под названием «сообщения». Сообщения являются комментариями Пользователя Сообщений

id | posts_id | from_user_id | to_user_id | message_description | created_at 
----------------------------------------------------------------------------- 
1  1   1    2    test1    2016-09-06 10:00:00 
2  1   1    2    test2    2016-09-06 11:00:00 
3  1   4    2    test3    2016-09-06 09:00:00 
4  1   4    2    test4    2016-09-06 15:00:00 
5  2   1    2    test1    2016-09-06 10:00:00 
6  2   1    2    test2    2016-09-06 11:00:00 
7  2   4    2    test3    2016-09-06 09:00:00 
8  2   4    2    test4    2016-09-06 15:00:00 

Результата результатов запроса должны быть

id | posts_id | from_user_id | to_user_id | message_description | created_at 
----------------------------------------------------------------------------- 
2  1   1    2    test2    2016-09-06 11:00:00 
4  1   4    2    test4    2016-09-06 15:00:00 
6  2   1    2    test2    2016-09-06 11:00:00 
8  2   4    2    test4    2016-09-06 15:00:00 

Что я пытаюсь получить сообщение мудрого & пользователя мудрым свои последние сообщения.

Я дал судимое ниже, но это не дает результата в правильном порядке.

SELECT * 
FROM messages 
WHERE to_user_id = '2' 
GROUP BY posts_id DESC, 
     from_user_id 
ORDER BY id DESC 
+0

@Strawberry i уже посетил этот пост. Но только для одной группы, я должен использовать 2 группы по столбцам, чтобы не получить ответ –

+1

Хм. Я не думаю, что это группа по порядку, потому что требование состоит в том, чтобы получить последнюю запись per_user_id. Попробуйте этот SELECT t1. * ОТ сообщений t1 WHERE t1.id = (выберите max (id) из сообщений t2, где t2.posts_id = t1.posts_id и t2.from_user_id = t1.from_user_id) –

+0

У вас есть 3 пользователя, но вы только кажется, хотят возвращать сообщения, относящиеся к одному из них (пользователь 2) – Strawberry

ответ

1

Эта проблема идентична тысячам других размещенных на SO. Оптимальное решение, как описано в руководстве, представляет собой некоррелированный подзапрос, например:

SELECT x.* 
    FROM my_table x 
    JOIN 
    (SELECT MAX(id) id 
     FROM my_table 
     WHERE to_user_id = 2 -- OPTIONAL 
     GROUP 
      BY from_user_id 
    ) y 
    ON y.id = x.id; 
+0

Где использовать posts_id ?? Это дает ошибку Неизвестный столбец «y.id» –

+0

Идентификатор сообщений здесь не требуется, но я добавил to_user_id. – Strawberry

+0

Я думаю, что это необходимо. Пожалуйста, проверьте вопрос о обновлении с данными таблиц «сообщений» и все еще даете ошибку «Неизвестный столбец ON y.id» –