论坛,获取最后的帖子/主题

时间:2009-08-16 20:04:48

标签: php mysql forum

基本上,我正在为内联网编写一个小型论坛脚本。

我的论坛有3个mysql(MySQLi)表:

forum_answer - 持有回复 forum_question - 持有第一篇文章 forum_categories - 包含类别的名称和描述。

好的,在论坛索引上,我有一个表来获取所有类别,但是,我还有一列来获取该类别/论坛中的最后一篇帖子。

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

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

谢谢:)

2 个答案:

答案 0 :(得分:2)

查询方面,您可以使用查询来获取类别列表,使用类似于:

的类别
 select forum_categories.id, forum_categories.name, max( forum_answer.id ) as 
 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

操作的成本有多高取决于论坛的性质。如果有人经常发帖,每次有人发帖时更新类别上的列可能会更贵。如果人们经常加载类别列表,那么联接可能是更昂贵的操作。

您可能还发现创建视图以从中提取类别列表是有益的:

 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

然后您可以访问它,就像它是一张桌子一样。

答案 1 :(得分:1)

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

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

当您的论坛内容量达到某个阈值时,最后帖子的实时计算将非常缓慢。通过每次提交新帖子时更新“缓存”,您将这个巨大的一次性计算工作划分为分布在许多请求上的小更新,因此几乎无法察觉。

删除帖子时获得的唯一点击,然后您需要更新问题和论坛的缓存。但这是一个罕见的事件,因此可以提供价格。

相关问题