我正在建立一个论坛,我遇到了一些问题。
基本数据库结构如下所示:
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 :(得分: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