我有两个MySqli表。一个称为" aiw_comments"。它有一个名为" post_id"的专栏,让我知道该评论的帖子是什么。
我还有一个名为" AIW_POSTS"的表,持有所有帖子。
现在,我需要一个mysqli
选择语句才能首先用最多的评论检索帖子。我的代码按预期完美地工作:
$results = mysqli_query($con,"SELECT AIW_posts.*
FROM AIW_comments, AIW_posts
WHERE (AIW_posts.id = AIW_comments.post_id AND childPost_id = 0)
GROUP BY AIW_comments.post_id
ORDER BY COUNT(*) DESC
, AIW_comments.post_id DESC
LIMIT $startIndex,$amount") or die(mysqli_error($con));
}
我添加了编辑帖子的功能。我给了" aiw_posts"两个新列" parentpost_id"one_answers" childpost_id"。我创建了一个PHP功能,该功能使我给了每个孩子和父帖的ID数组,给定了任何帖子的ID。
如何像以前一样选择最多评论的帖子,但是这次包括所有父母和孩子的评论,就好像他们是同一帖子吗?
这是SQL查询,它将返回您要寻找的数据:
SELECT P.post_id
FROM AIW_posts P
INNER JOIN AIW_comments C ON C.post_id = P.post_id
INNER JOIN AIW_posts PP ON PP.post_id = P.parentPost_id
INNER JOIN AIW_posts PC ON PC.post_id = P.childPost_id
GROUP BY P.post_id
ORDER BY COUNT(C.post_id) DESC, P.post_id DESC
LIMIT 1 -- Or whatever limit you want
我选择只为您提供SQL查询而不是PHP实现,以专注于您的问题并简化我的答案的可读性。
关于我的查询的几个信息:
- 而不是使用旧派语法进行关节(...来自Table1,table2哪里...),我使用了
INNER JOIN
子句 - 我还用了两个获得父母和子女职位的关节
- 出于可读性目的,我的查询仅返回
post_id
。为了获得您想要的所有专栏,您只需在SELECT
子句中添加它们,不要忘记在GROUP BY
子句中添加这些列!
希望这对您有帮助。