论坛的嵌套数据

发布于 2024-10-26 22:29:54 字数 359 浏览 4 评论 0原文

我自己陷入困境......

我们在嵌套集模型中左右限制来存储论坛帖子,我需要选择按最新回复排序的线程。

相关的表结构:

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

任何帮助将非常感激。

Got myself stuck...

Us left and right limits in nested set model to store forum posts and I need to select threads ordered by latest reply.

Relevant table structure:

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

so from that I need to get

id last_reply latest
1  4          2011-01-05
2  6          2011-01-04

any help would be very much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海拔太高太耀眼 2024-11-02 22:29:54
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

,这样会快得多。

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

Nested sets is not good for selecting the depth level so this is not going to be efficient.

I would suggest storing the thread started id along with each post and create a composite index on (starter, date).

This way, you could just use:

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

which would be much faster.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文