Задать вопрос
@freeeeez

Как сгруппировать диалоги по двум полям в MySQL через GroupBY?

Есть таблица dialogs с диалогами по товарам пользователя, поля таблицы id, tovar_id, sender_id, recipient_id, message как вывести список диалогов чтобы они не повторялись? Каждый диалог содержит ID товара, ID того кто написал и ID кому он написал. Соответственно если идет переписка между пользователями id=1 и id=2, то в таблицы будут следующие строки:
- id=1, tovar_id=1, sender_id=1, recipient_id=2, message='привет'
- id=2, tovar_id=1, sender_id=2, recipient_id=1, message='hello'
Если group by tovar_id, sender_id, recipient_id то выводится две строки, хотя это один диалог. По tovar_id=1может вестись переписка с другими пользователями,
- id=3, tovar_id=1, sender_id=101, recipient_id=1, message='new message'
поэтому не подходит просто группировка по tovar_id
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя Руслан . К ответам на вопрос (2)
LaRN
@LaRN
Senior Developer
Можно вот так попробовать:

select dd.tovar_id, dd.sender_id
  from dialogs dd
 where not exists(select 1
                    from dialogs ds
                   where ds.tovar_id     = dd.tovar_id
                     and ds.recipient_id = dd.dd.sender_id
                     and ds.id           < dd.id)
 group by dd.tovar_id, dd.sender_id


Тут будут все диалоги по всем товарам.
Если нужно фильтровать по пользователю или товару, можно это сделать задав секцию where
Ответ написан
Комментировать