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
4

1 回答 1

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

于 2013-01-09T16:16:54.093 回答