【问题标题】:Nested data for forum论坛的嵌套数据
【发布时间】:2011-03-24 15:07:34
【问题描述】:

让自己陷入困境......

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

相关表结构:

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

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql nested-sets


    【解决方案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
    

    这样会更快。

    【讨论】:

    • Cheers Quassnoi - 我说服自己不需要重新访问数据结构 - 但这纯粹是虚荣。谢谢老兄...
    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多