Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检索每个类别中的最新帖子-论坛_Php_Sql_Forum - Fatal编程技术网

Php 检索每个类别中的最新帖子-论坛

Php 检索每个类别中的最新帖子-论坛,php,sql,forum,Php,Sql,Forum,我正在建立一个论坛,我遇到了一些问题 基本数据库结构如下所示: 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等于

我正在建立一个论坛,我遇到了一些问题

基本数据库结构如下所示:

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的答案,我希望您理解

如何获得每个类别的最新帖子?包括posts线程标题和用户表中的用户名。我是否应该更改我的表结构,并向类别表或其他内容添加“最新发布id”字段

非常感谢你的帮助。我知道也有类似的问题,但我也想知道是否应该将最新的帖子id和所有这些信息存储在categories表中,或者使用一个巨大的查询来检索每个页面加载的所有内容

编辑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

如果你有一个创建日期,你需要得到一个最大日期,如果你没有,你可以使用最大(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\u id

您使用的是哪种RDBMS?如果这将显示在论坛列表的每个页面负载上,那么在论坛表中保存缓存的
最新的post\u id
或类似内容可能是有意义的。在新的帖子创建/编辑/任何您选择的逻辑上更新。然后,显示最新的帖子就像一个
JOIN
一样简单,而不是多个查询或子查询。我如何获得用户名?那头衔呢?我用当前查询更新了我的问题,该查询不检索最新帖子。如果您想使用FK获取必须使用JOIN的正常值,我的查询将检索forum_posts表中的所有内容。我将用
JOIN
更新我的示例,您也将获得用户的信息,希望帮助问题是我只能在子查询中获得一个字段。请看我新更新的问题,我在子查询中选择了标题和其他内容。这不起作用,因为这样我只能得到一个字段。希望你能理解。