Структура БД личных сообщений между пользователями

Benderlio

Новичок
Добрый вечер.
Подскажите структуру БД личных сообщений между пользователями.
У меня такая получается,
id | msg_text | to_user | from_user | date
1 | фывфыв | 187 | 15 |
2 | asdasdda | 21 | 187 |
3 | asdasdas | 15 | 187 |
Не пойму как вывести список уникальных веток между пользователями.
Т.е. надо вывести записи по уникальным to_user и from_user, причем (187 и 15) и (15 и 187) - это должна быть одна запись.
Спасибо.
 

Benderlio

Новичок
ну вот к примеру в данной таблице пользователь 187 написал 15 и 15-й ответил.
в выборке это должна быть одна запись.
Мне надо вывести с кем общался пользователь и кто ему писал.
 

С.

Продвинутый новичок
Во-первых,
ну вот к примеру в данной таблице пользователь 187 написал 15 и 15-й ответил.
в выборке это должна быть одна запись.
Если в базе две записи, то и в выборке будет две, не продумывай сущностей, которых нет.

Во-вторых, что же токе "уникальная ветка" все-таки?
 

prolis

Новичок
вот например уникальный номер пары чатов
Код:
select CONCAT_WS('.',least(to_user,from_user),greatest(to_user,from_user)) as pairId
from table
group by pairId
 

Benderlio

Новичок
prolis
спасибо, то что нужно
а на больших таблицах, так понимаю, будет тормозить?
 

Benderlio

Новичок
С.
может не правильно высказался, мне необходимо выбрать с кем говорил данный пользователь и кто ему писал.
т.е. получить своего рода список контактов и уже заходя в него выводить весь чат
 

С.

Продвинутый новичок
"Список контактов" это понятнее "уникальной ветки".

Можно конечно потыкаться в условные функции в MySql, но я бы сделал без затей:
... WHERE to_user=15 GROUP by from_user
... WHERE from_user=15 GROUP by to_user
и сложил два массива.
 

prolis

Новичок
С.
может не правильно высказался, мне необходимо выбрать с кем говорил данный пользователь и кто ему писал.
т.е. получить своего рода список контактов и уже заходя в него выводить весь чат
гулять так гулять!
Код:
select if(to_user=15,from_user,to_user) as user from table where 15 in (to_user,from_user)
это тормозить не будет
 
Сверху