Как сгруппировать диалоги по двум полям в 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
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