2009-08-16 73 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