SQL для отображения и сортировки сообщений и их ответов в одной таблице - PullRequest
0 голосов
/ 23 марта 2011

Я написал простую систему обмена сообщениями для CMS, которую я разрабатываю, и мне трудно найти лучший способ получить все сообщения и их ответы, упорядоченные по последнему слову (сообщение или ответ).

У меня есть таблица с именем " messages ", которая имеет поля: * id, active [1,0], тема, сообщение, datetime, user_from, user_to, reply_id *

Все просто, и * reply_id * пуст для сообщений основного уровня и содержит родительский id для ответов. Я в растерянности из-за того, как написать SQL, чтобы получить все сообщения основного уровня в порядке datetime DESC , основанные на них самих и их ответах. Я уверен, что это сделано с UNION некоторого вида, но мои навыки SQL отсутствуют. И если тот же SELECT может подсчитать количество ответов в каждом сообщении основного уровня, это было бы удивительно!

Любая помощь будет принята с благодарностью!

1 Ответ

3 голосов
/ 23 марта 2011

Уже поздно, и я устал, но я думаю, что вы можете попробовать что-то вроде этого:

SELECT main.*, COUNT(reply.id) AS cnt_replies, MAX(reply.datetime) AS max_datetime
FROM posts AS main
LEFT JOIN posts AS reply
    ON main.id = reply.reply_id
GROUP BY main.id
HAVING main.reply_id IS NULL
ORDER BY max_datetime DESC

РЕДАКТИРОВАТЬ: фиксированный запрос
РЕДАКТИРОВАНИЕ2: теперь включает в себя сообщения без каких-либо ответов

...