w_b_x
@w_b_x

Как перекрёстно сгрупировать выдачу через GROUP BY в MYSQL?

Здравствуйте!

Есть запрос, вида:
SELECT `from_user`,`to_user`,`text`,`read_state` FROM 
( SELECT `from_user`,`to_user`,`text`,`read_state`,`ts` FROM `gr_messages`  WHERE `to_user` = '1' OR `from_user` = '1' ORDER BY `ts` DESC ) 
as inv GROUP BY `from_user` ORDER BY `ts` DESC LIMIT 10


БД выглядит вот так:
1ba09f448a474a68ab64e1042ce0911d.png
.
.
Результат запроса такой:
96f3cc81aa5d4e6fb1e15be7bb2f75a1.png
.
.
Но необходимо и эти два результата объединить, причём в пользу `from_user`, в нём должно быть 3, а столбец `text` из строки с самым большим ts, т.е должна получится одна строка в результате, такого вида (сделал скрин через редактирование html):
1595fd1573fe4966995457643cc58ac8.png
.

Как это сделать, как запрос поправить? Спасайте
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
NikitaTratorov
@NikitaTratorov
CTO
Вы хотите невозможного. Думаю, что у Вас проблема в алгоритме или логике, поэтому и задача возникла. Подумайте еще.
Что касается Вашего запроса, то подобная группировка уже не сработает на MySQL 5.7 из-за более строгих правил sql_mode.
Вам никак не получить строку, которую Вы нарисовали, потому что text = Хорошо) написал не 3, а 1.
Но уж если ооочень хочется, то переложите желаемую группировку на приложение, вычисляя, с кем разговаривал 1. Отстаньте от БД - сэкономите свое время и ресурсы СУБД.
Или, я уже говорил - меняйте логику.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы