基本上,我正在为内联网编写一个小型论坛脚本。
我的论坛有3个mysql(MySQLi)表:
forum_answer - 持有回复 forum_question - 持有第一篇文章 forum_categories - 包含类别的名称和描述。
好的,在论坛索引上,我有一个表来获取所有类别,但是,我还有一列来获取该类别/论坛中的最后一篇帖子。
您对我如何获得该论坛中的最后一篇文章有任何想法吗?
我在考虑在forum_categories表上添加一个新列,并在每次发布帖子时更新它,但是,这可能会变得混乱。
谢谢:)
答案 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]表中。 “缓存”意味着每当有人添加新帖子或删除帖子时都会更新它们。
当您的论坛内容量达到某个阈值时,最后帖子的实时计算将非常缓慢。通过每次提交新帖子时更新“缓存”,您将这个巨大的一次性计算工作划分为分布在许多请求上的小更新,因此几乎无法察觉。
删除帖子时获得的唯一点击,然后您需要更新问题和论坛的缓存。但这是一个罕见的事件,因此可以提供价格。