Captain
@Captain

Как сгруппировать данные «по парам» в MySQL?

Есть таблица в которой находятся обсуждения. Структура такая:
from_id - от кого
to_id - к кому
p_id - предмет обсуждения
message - сообщения


Это диалоги, т.е. общаются 2 человека. В рамках одного p_id могут быть сообщения от одного from_id к другому to_id и обратно от to_id к from_id.
Например
from_id | to_id | p_id | message
1 | 2 | 5 | привет
2 | 1 | 5 | и тебе привет

Это пример диалога по предмету обсуждения 5. Простая группировка по from_id, to_id и p_id выдает количество диалогов *2, так как учитываются только реплики "в одну сторону". Вопрос - как мне вытащить все p_id и их участников, т.е. получить список диалогов?

Важное уточнение, один и тот же P_id могут обсуждать 1 со 2, 2 с 3 и 1 с 3. и это будет 3 разных диалога
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 2
@MaksPaverov
SELECT * FROM msg WHERE from_id=2 OR to_id=2 AND p_id=5;

Как-то так
Ответ написан
@Vitsliputsli
Например так:
SELECT DISTINCT
        p_id,
        CASE WHEN temp.var = 0 THEN from_id ELSE to_id END user_id
    FROM table 
    CROSS JOIN (SELECT 0 var FROM DUAL UNION ALL SELECT 1 var FROM DUAL) temp

Вывод будет таким:
p_id user_id
5      1
5      2
Ответ написан
Ваш ответ на вопрос

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

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