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

Dinstint по условию, возможно?

Есть таблица личных сообщений
Вообщем
id - ид - сообщения
time - время
text -текст
sender - отправитель
receiver - получатель
s_del - удалил сообщение отправитель
r_del - удалил сообщение получатель
Проблема заключается в том, что мне нужно вывести диалоги. Т. е. по одному последнему сообщению между пользователями.
К примеру Ваш user_id 1. У меня получается условие, где sender = 1 or receiver=1
У меня получается
SELECT * FROM `messages` WHERE `sender`=1 or `receiver`=1 order by id DESC

Вообщем сижу мануалю час в голову не черта не приходит. Хотя бы дайте направление... Заранее спасибо
  • Вопрос задан
  • 209 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
tsklab
@tsklab
Здесь отвечаю на вопросы.
SELECT 'test' FROM `messages` WHERE `sender`=1 or `receiver`=1 order by time DESC

Подзапрос:
SELECT MAX('id') FROM `messages` WHERE `sender`=1 or `receiver`=1


Принцип диалогов в ВК
Пока вы не приведёте (важнее даже для себя) задачу в терминах БД ничего не получится.
Ответ написан
qonand
@qonand
Software Engineer
SELECT * FROM messages WHERE id IN (SELECT max(id) FROM messages WHERE `sender`=1 or `receiver`=1 GROUP BY sender, receiver)
Ответ написан
Комментировать
risentveber
@risentveber
fullstack web developer
Условие сортировки по времени создания эквивалентно условию сортировки по id, только последнее работает как правило быстрее.
SELECT *
FROM 'messages' 
WHERE ID IN (
  SELECT max(id) 
  FROM `messages` 
  WHERE `sender`=1 or `receiver`=1 
  GROUP BY `sender`, `reciever`
);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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