SQL-сортировка, группировка, а затем повторная сортировка?

  • Автор темы Eltaion
  • 25
  • Обновлено
  • 18, May 2024
  • #1
Всем привет, Я пытаюсь создать базовую систему обмена сообщениями, чтобы пользователи могли обмениваться сообщениями друг с другом.

У меня есть таблица под названием «сообщения» и 7 столбцов в таблице –

message_id — по умолчанию, auto_increment

sender_id - идентификатор отправителя

приемник_id - идентификатор получателя

thread_id - я думаю, чтобы сгруппировать разговоры вместе?

открыто - 0 или 1, открыто или нет

сообщение - содержание сообщения

date_time - отметка DATETIME

Проблема, с которой я столкнулся, заключается в попытке сгруппировать сообщения, а затем отсортировать их.

 SELECT * FROM messages WHERE sender_id = 4279 OR receiver_id = 4279 GROUP BY thread_id ORDER BY date_time DESC
Код (SQL): есть ли простой способ сгруппировать их в потоки, при этом результатом будет самое новое сообщение в потоке, а затем отсортировать их по дате_времени?

Я думал как-нибудь использовать message_ID, поскольку они автоматически увеличиваются, и они будут в порядке? Не знаю, как это сделать, буду очень признателен за любую помощь!

Eltaion


Рег
01 Jun, 2013

Тем
1

Постов
2

Баллов
12
  • 18, May 2024
  • #2
Я думаю, это может сработать для вас: не проверял... выбирать отдельный( thread_id ), sender_id, reciever_id, открыто, сообщение, дата_время от сообщения ГДЕ sender_id = 4279 ИЛИ получатель_id = 4279 СОРТИРОВАТЬ ПО дате_времени DESC
 

Роман Христалов


Рег
15 May, 2011

Тем
1

Постов
33

Баллов
43
  • 07, Jun 2024
  • #3
Часто бывает полезно настроить «скрипку», чтобы показать нам образец ваших данных. Я думаю, что ваша ситуация примерно такая: http://sqlfiddle.com/#!9/263a7/1/0

 select M1.thread_id, max(M2.message_id)
from messages as M1, messages M2
where M1.thread_id = M2.thread_id
group by M1.thread_id


Код (разметка): message_id действует как прокси для сортировки по дате, поскольку message_id в любом случае отражает порядок их добавления.

Если это не так (а это, вероятно, не так), добавьте больше данных в оператор вставки и дайте нам представление о том, какие данные вы ожидаете увидеть в результате.
 

jaguar777


Рег
28 Jun, 2011

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966