选择评论最多的帖子以及子帖和父帖

时间:2014-01-21 19:54:18

标签: php mysql sql select mysqli

我设置了两个MySQLi表。一个叫做“AIW_comments”。它有一个标题为“post_id”的列,让我知道此评论所指的帖子。

我还有一个名为“AIW_posts”的表,其中包含所有帖子。

现在我需要一个mysqli select语句来检索首先评论最多的帖子。我使用以下代码完美地运行代码:

$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”和“childPost_id”。我创建了一个PHP函数,它给出了一个给定任何帖子ID的每个子和父帖子的id数组。

如何选择评论最多的帖子,就像我之前所做的那样,但这次包括所有家长和孩子发表评论,好像他们是同一篇帖子一样?

1 个答案:

答案 0 :(得分:0)

以下是将返回您要查找的数据的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实现,以便专注于您的问题并简化我的答案的可读性。

关于我的查询的信息很少:

  • 而不是将旧学校语法用于关节(... FROM table1, table2 WHERE ...),我使用了INNER JOIN子句
  • 我又用了两个 获得父母和子女职位的联合会
  • 为了便于阅读, 我的查询只返回post_id。为了得到你想要的所有列,你 只需在SELECT子句中添加它们,不要忘记 在GROUP BY子句
  • 中添加这些列

希望这会对你有所帮助。

相关问题