@mark_me

Вывод до первого совпадения SQL?

Здравствуйте.

Пишу мини-ЛС для сайта. Задача сделать вывод последнего сообщения от пользователя, игнорируя предыдущие (как диалоги ВК).

У меня такая таблица messages:
id | sender | receiver | message | date

Сейчас у меня выводиться всё подряд:
SELECT * FROM messages
INNER JOIN users ON messages.receiver = users.id
WHERE users.id = 1
ORDER BY messages.date DESC

5d9a1ec647745677208650.jpeg
  • Вопрос задан
  • 364 просмотра
Решения вопроса 2
xEpozZ
@xEpozZ
Веб-разработчик
Может поле message.date будет хранить еще и DATE?

Быстрое решение:

SELECT * FROM messages
INNER JOIN users ON messages.receiver = users.id
WHERE users.id = 1
ORDER BY messages.id DESC
Ответ написан
erge
@erge
Примус починяю
вроде как-то так, если правильно понимаю

SELECT m.*, u.* FROM messages m
  INNER JOIN users u ON m.receiver = u.id
  INNER JOIN (
    SELECT receiver, sender, max(date) as date
      FROM messages
      GROUP BY receiver, sender
  ) m2 ON m.receiver = m2.receiver
      AND m.sender = m2.sender
      AND m.date = m2.date
  WHERE u.id = 1
  ORDER BY m.date DESC


но не понятно зачем джойнится users на ресейвера, может все-таки на сендера? ведь в диалоге должны отображаться имена отправителей??

SELECT m.*, u.* FROM messages m
  INNER JOIN users u ON m.sender = u.id
  INNER JOIN (
    SELECT receiver, sender, max(date) as date
      FROM messages
      GROUP BY receiver, sender
  ) m2 ON m.receiver = m2.receiver
      AND m.sender = m2.sender
      AND m.date = m2.date
  WHERE m.receiver = 1
  ORDER BY m.date DESC
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nozzy
Symfony, Laravel, SQL
SELECT * FROM messages
WHERE receiver = 1
ORDER BY date DESC LIMIT 1
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы