Вложенные данные для форума

Застрял...

Мы используем левый и правый пределы в модели вложенного набора для хранения сообщений на форуме, и мне нужно выбрать темы, упорядоченные по последнему ответу.

Соответствующая структура таблицы:

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

который был бы намного быстрее.

Другие вопросы по тегам