Вложенные данные для форума
Застрял...
Мы используем левый и правый пределы в модели вложенного набора для хранения сообщений на форуме, и мне нужно выбрать темы, упорядоченные по последнему ответу.
Соответствующая структура таблицы:
id lft rght date
1 1 4 2011-01-01
2 5 8 2011-01-02
3 6 7 2011-01-04
4 2 3 2011-01-05
так что от этого мне нужно получить
id last_reply latest
1 4 2011-01-05
2 6 2011-01-04
Любая помощь будет очень высоко ценится.
1 ответ
Решение
SELECT pt.*, MAX(pc.date) AS latest
FROM post pt
JOIN post pc
ON pc.lft BETWEEN pt.lft AND pt.rgt
WHERE NOT EXISTS
(
SELECT NULL
FROM post pu
WHERE pt.lft BETWEEN pu.lft AND pu.rgt
)
GROUP BY
pt.id
ORDER BY
latest DESC
Вложенные наборы не подходят для выбора уровня глубины, поэтому это не будет эффективным.
Я бы предложил сохранить начатую тему id
вместе с каждым постом и создать сводный индекс на (starter, date)
,
Таким образом, вы можете просто использовать:
SELECT pt.*,
MAX(date) AS latest
FROM post pu
JOIN post pt
ON pt.id = pu.starter
GROUP BY
pu.starter
ORDER BY
latest DESC
который был бы намного быстрее.