@dev400

SQL запрос для чата. Как вести диалог?

"SELECT * FROM " . parent::PREFIX . $this->table . " WHERE from_user = ? ORDER BY date DESC";

Так выводим все сообщения "От кого".
к примеру id пользователя = 3.
Каким запросом можно выбрать все сообщения где "от_кого = 3" и кому = 3", чтобы они правильно чередовались?
  • Вопрос задан
  • 352 просмотра
Решения вопроса 3
Fqyeh29
@Fqyeh29
↓ ИМХО ↓
"SELECT * FROM " . parent::PREFIX . $this->table . " WHERE from_user = 3 OR to_user = 3 ORDER BY date ASC";
Ответ написан
sanchezzzhak
@sanchezzzhak
Ля ля ля...
На примере Вк/Фб диалогов используется 2 таблицы
1 Диалог
2 Сообщения
Для личной переписки хватает 1 таблицы но я предпочитаю использовать 2

Переписка сообщения в рамках 1 таблицы ( ps этот же запрос используется для чека диалогов )
SELECT *
FROM message
WHERE 
(user_one='11' AND user_two='16') 
OR
(user_one='11' AND user_two='13')


=====================

Тот же подход только в 2 таблицы диалоги/переписка как в вк фб.

Между пользователями может быть только 1 диалог кто первый написал сообщение того и тапки)
Контролировать дубликаты диалогов придется на уровне приложения это скажем небольшой минус.

Мои диалоги с пользователями
set @user_id=11;
SELECT id, last_message_id, update_at, user_one, user_two FROM message_dialog 
where user_one =@user_id or user_two=@user_id;


для открытия переписки мы из списка выбрали скажем диалог, получили ИД переписки например диалог в системе с id 5
Получаем переписку
set @dialog_id=5;
select id, dialog_id, user_id, message, created_at, etc from dialog_message where dialog_id=@dialog_id order by id desc
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
t-alexashka
@t-alexashka
░▒▓█▓▒░
order by dateAdded asc
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
27 окт. 2020, в 15:42
1000 руб./в час
27 окт. 2020, в 15:30
100000 руб./за проект
27 окт. 2020, в 15:28
100000 руб./за проект