Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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_Mysql_Sql_Select_Mysqli - Fatal编程技术网

Php 选择评论最多的帖子,同时选择子帖子和父帖子

Php 选择评论最多的帖子,同时选择子帖子和父帖子,php,mysql,sql,select,mysqli,Php,Mysql,Sql,Select,Mysqli,我设置了两个MySQLi表。一个叫做“AIW_评论”。它有一个标题为“post_id”的专栏,让我知道这个评论指的是什么帖子 我还有一张名为“AIW_posts”的表格,上面有所有的帖子 现在我需要一个mysqliselect语句来首先检索评论最多的帖子。我使用以下方法使代码按预期完美运行: $results = mysqli_query($con,"SELECT AIW_posts.* FROM AIW_comments, AIW_posts WHERE (AIW_posts.id = AIW

我设置了两个MySQLi表。一个叫做“AIW_评论”。它有一个标题为“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的父帖子


如何像以前一样选择评论最多的帖子,但这次将包含所有父帖子和子帖子评论,就像它们是同一篇帖子一样?

以下是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实现,以便关注您的问题并简化我的答案的可读性

关于我的查询,只有一些信息:

  • 而不是使用老式的连接语法(…来自表1, 表2,其中…,我使用了
    内部连接
    子句
  • 我用了另外两个 获取父和子帖子的连接
  • 为了便于阅读, 我的查询只返回
    post\u id
    。要获取所需的所有列,请 只需将它们添加到
    SELECT
    子句中,不要忘记 将这些列添加到
    分组依据
    子句中

希望这能对您有所帮助。

对于您提出的结构,肯定有办法做到这一点,但您是否研究过嵌套集结构?这使得在SQL中使用分层数据更加容易。这里有一个例子。