0

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

我为论坛准备了 3 个 mysql (MySQLi) 表:

forum_answer - 保存回复 forum_question - 保存第一个帖子 forum_categories - 保存类别的名称和描述。

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

您对我如何在该论坛上发布最后一个帖子有任何想法吗?

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

谢谢 :)

4

2 回答 2

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

然后您可以像访问表格一样访问它。

于 2009-08-16T20:36:15.777 回答
1

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

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

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

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

于 2009-08-16T20:10:44.200 回答