2011-03-24 66 views
1

让自己卡住了......关于论坛的嵌套数据

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

相关的表结构:

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 

这将是快得多。

+0

Cheers Quassnoi - 我说服自己,我不需要重新访问数据结构 - 但那完全是虚荣心。谢谢matey ... – 2011-03-25 09:12:46