我正在建立一個論壇,並且遇到了一些問題。檢索每個類別的最新帖子 - 論壇
基本的數據庫結構是這樣的:
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
? – sgeddes
如果這將在論壇列表的每一頁加載中顯示,那麼在論壇表中保存一個緩存的'most_recent_post_id'或類似的東西可能是有意義的。更新新的文章創建/編輯/您選擇的任何邏輯。然後,顯示最近的帖子與「JOIN」一樣簡單,而不是多個查詢或子查詢。 –