我正在建立一个论坛,并且遇到了一些问题。检索每个类别的最新帖子 - 论坛
基本的数据库结构是这样的:
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”一样简单,而不是多个查询或子查询。 –