2009-08-16 75 views
0

基本上,我正在为Intranet编写一个小的论坛脚本。论坛,获得最后发布/主题

我已经得到了论坛3个MySQL(库MySQLi)表:

forum_answer - 保存回复 forum_question - 举行第一次发贴 forum_categories - 保存名称和类别的描述。

好的,所以在论坛索引中,我有一个表来获取所有类别,但是,我也有一列用于获取该类别/论坛中的最后一篇文章。

对于我如何获得该论坛中发布的最后一篇文章,您有任何想法吗?

我正在考虑在forum_categories表上添加一个新列,并在每次发布帖子时更新它,但是,这可能会变得混乱。

谢谢:)

+0

您没有每个帖子的日期字段? – 2009-08-16 20:14:52

+0

我这样做,但我将如何订购它的回复和第一篇文章? – bear 2009-08-16 20:55:52

回答

2

查询明智的,你可以用你的查询得到它得到使用类似的东西来分类列表:

​​

它是如何操作昂贵取决于你的论坛的性质。如果用户频繁发帖,每次有人发帖时更新该类别的专栏可能会更加昂贵。如果人们频繁地加载类别列表,联接可能是更昂贵的操作。

您也可能会发现它有利于创建一个视图,从拉类别列表:

create view category_list as 
select forum_categories.id, forum_categories.name, max(forum_answer.id) as latest_asnwer_id 
from forum_categories 
left join forum_questions on forum_questins.category_id = forum_categories.category_id 
left join forum_answers on forum_answers.question_id = forum_questions.question_id 
group by forum_categories.id, forum_categories.name 

然后你可以访问,就好像是一张桌子。

+0

有趣的是,当我试图创建视图时,它只对一个类别做了。 – bear 2009-08-16 21:11:49

+0

啊,max(forum_answer.id)只提取最新的回复,这不是我们所需要的。 – bear 2009-08-16 22:33:23

+0

啊,我忽略了group by子句。您需要按照您包含的所有forum_categories列进行分组。我已经更新了我的答案,以说明问题。 – 2009-08-16 23:39:11

1

你实际上是在朝着正确的方向思考。

您应该“缓存”问题的最后一篇文章和论坛的最后一篇文章,并分别将它们存储在[forum_question]和[forum_categories]表中。 “缓存”意思是每次有人添加新帖子或删除帖子时更新它们。

当您的论坛内容数量达到某个阈值时,最新帖子的实时计算将非常缓慢。每次提交新帖子时,通过更新“缓存”,您可以将这一庞大的一次性计算工作分成许多请求分发的小型更新,因此几乎不会引起注意。

当你删除一个帖子时,你会得到唯一的结果,那么你需要更新问题和论坛的缓存。但这是一件罕见的事情,所以价格可以提供。

+0

好的,我遇到了麻烦:/ – bear 2009-08-16 20:55:00