Хорошо, я пытаюсь основать что-то похожее на этом, но не совсем получаю это: GROUP BY и ORDER BY
По сути, запрос запроса для поиска последних сообщений в каждой «ветке» между текущим вошедшим в систему пользователем и любыми другими пользователями, но с помощью плоской (не «потоковой») таблицы сообщений:
messages {
id,
from_uid,
to_uid,
message_text,
time_added
}
Предполагая, что текущим пользователем является «1», а последнее сообщение в каждой «ветке» может быть либо от этого пользователя, либо до этого пользователя (другая сторона всегда обозначается thread_recipient):
SELECT a.*,thread_recipient
FROM messages a
JOIN (SELECT IF(from_uid = '1',to_uid,from_uid) AS thread_recipient,
MAX(time_added) AS recency
FROM messages
WHERE (from_uid = '1' OR to_uid = '1')
GROUP BY thread_recipient) b ON thread_recipient = (IF(a.from_uid = '1',a.to_uid,a.from_uid))
AND b.recency = a.time_added
ORDER BY a.time_added DESC
Но я боюсь, что это не сработает, и, возможно, сообщения, отправленные одновременно, могут в конечном итоге быть возвращены не тому пользователю?
Мое состояние ГДЕ неуместно?
Любая мудрость высоко ценится.