Вложенные данные для форума - PullRequest
1 голос
/ 24 марта 2011

Застрял ...

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

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

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 Ответ

1 голос
/ 24 марта 2011
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

, что будет намного быстрее.

...