2013-01-09 72 views
0

我正在建立一個論壇,並且遇到了一些問題。檢索每個類別的最新帖子 - 論壇

基本的數據庫結構是這樣的:

users 
| user_id | username 

categories 
| category_id | category_name | 

forum_posts 
| post_id | ref_post_id (FK) | ref_category_id (FK) | ref_user_id (FK) | post_date | 

如果ref_post_id是0,這意味着它是有一個標題線程的主哨。對於線程的解答ref_post_id等於主帖子的post_id。我希望你明白。

如何獲得每個類別的最新帖子?包括帖子主題標題和用戶表中的用戶名。我應該改變我的表結構,並添加一個「latest_post_id」字段到類別表或什麼?

非常感謝您的幫助。我知道有類似的問題,但我也想知道是否應該在類別表中存儲latest_post_id和所有內容,或者有一個巨大的查詢來檢索每個頁面加載中的所有內容。

編輯2:這裏是我當前的查詢:

SELECT category_id, name, 
(SELECT COUNT(*) FROM forum_posts WHERE ref_category_id = category_id AND ref_post_id = 0) count_threads 
(
SELECT title, ref_user_id, username FROM forum_posts 
LEFT JOIN users ON user_id =  ref_user_id 
WHERE latest_post_id = (SELECT MAX(latest_post_id) FROM forum_posts WHERE ref_category_id = category_id LIMIT 1) 
) 
FROM forum_categories 
+0

? – sgeddes

+0

如果這將在論壇列表的每一頁加載中顯示,那麼在論壇表中保存一個緩存的'most_recent_post_id'或類似的東西可能是有意義的。更新新的文章創建/編輯/您選擇的任何邏輯。然後,顯示最近的帖子與「JOIN」一樣簡單,而不是多個查詢或子查詢。 –

回答

0

,如果你有你需要得到一個與MAX日期,如果你沒有,你可以使用MAX(創建日期post_id),但如果讓用戶編輯他們的帖子,並且想要獲取創建或編輯的最新創建者,則應該向數據庫添加修改日期。

以獲得最新的崗位:

SELECT * FROM forum_posts p 
INNER JOIN users u ON p.ref_user_id=u.user_id 
WHERE `post_id`=(SELECT max(`post_id`) FROM forum_posts WHERE ref_category_id=$value); 

如果您使用的是日期,只需使用該字段,而不是post_id您正在使用哪個RDBMS

+0

我將如何獲取用戶名?和標題?我用我當前的查詢更新了我的問題,它不檢索最新的帖子。 – lawls

+0

我的查詢將檢索forum_posts表中的所有內容,如果您想使用FK來獲取正常值,則必須使用JOIN。我會用'JOIN'更新我的例子 – Naryl

+0

,你也會得到用戶的信息,希望有幫助 – Naryl

相關問題