Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 MYSQL返回另一个表中具有列关系数的行_Php_Mysql_Database - Fatal编程技术网

Php MYSQL返回另一个表中具有列关系数的行

Php MYSQL返回另一个表中具有列关系数的行,php,mysql,database,Php,Mysql,Database,我有一个表类别和表帖子。我想返回类别,有超过3个职位 我的问题 SELECT `categories`.`category_title`, COUNT(posts.post_id) as total_posts FROM (`categories`) JOIN `posts` ON `posts`.`category_id` = `categories`.`category_id` HAVING `total_posts` > 3 ORDER BY `categories`.`da

我有一个表
类别
和表
帖子
。我想返回类别,有超过3个职位

我的问题

SELECT `categories`.`category_title`, COUNT(posts.post_id) as total_posts 
FROM (`categories`) 
JOIN `posts` ON `posts`.`category_id` = `categories`.`category_id` 
HAVING `total_posts` > 3 
ORDER BY `categories`.`date_created` desc

它只返回1行。。在不使用两个查询的情况下,执行此类查询的正确方法是什么?

您需要按类别对项目进行分组

SELECT `categories`.`category_title`, COUNT(posts.post_id) as total_posts 
FROM (`categories`) 
JOIN `posts` ON `posts`.`category_id` = `categories`.`category_id` 

GROUP BY `categories`.`category_id`

HAVING `total_posts` > 3 
ORDER BY `categories`.`date_created` desc

您需要按类别对项目进行分组

SELECT `categories`.`category_title`, COUNT(posts.post_id) as total_posts 
FROM (`categories`) 
JOIN `posts` ON `posts`.`category_id` = `categories`.`category_id` 

GROUP BY `categories`.`category_id`

HAVING `total_posts` > 3 
ORDER BY `categories`.`date_created` desc

您的查询使用了一个名为“hidden columns”的MySQL功能,您甚至可能不知道它。这是因为您的查询引用的是元素,例如date_created,这些元素应该聚合,但不是(“should”在这里的意思是根据SQL标准和大多数其他数据库)

您的查询的问题是缺少分组依据。另一种编写方法是在加入类别之前,在子查询中进行聚合:

SELECT `categories`.`category_title`, total_posts 
FROM `categories` JOIN
     (select categoryid, COUNT(posts.post_id) as total_posts
      from `posts`
      group by categoryid
      having count(*) > 3
     ) pc
     ON `pc`.`category_id` = `categories`.`category_id`
ORDER BY `categories`.`date_created` desc

您的查询使用了一个名为“hidden columns”的MySQL功能,您甚至可能不知道它。这是因为您的查询引用的是元素,例如date_created,这些元素应该聚合,但不是(“should”在这里的意思是根据SQL标准和大多数其他数据库)

您的查询的问题是缺少分组依据。另一种编写方法是在加入类别之前,在子查询中进行聚合:

SELECT `categories`.`category_title`, total_posts 
FROM `categories` JOIN
     (select categoryid, COUNT(posts.post_id) as total_posts
      from `posts`
      group by categoryid
      having count(*) > 3
     ) pc
     ON `pc`.`category_id` = `categories`.`category_id`
ORDER BY `categories`.`date_created` desc

非常感谢。为什么这个带有子查询的查询比只在我的原始查询中添加
groupby
要好?@CyberJunkie。ORDER BY子句使用了未聚合的列或GROUP BY子句中的列。这在MySQL中是可以接受的,但在任何其他数据库中都不能接受。更好的版本应该是说“ORDER by MIN(categories.date_created)”或者类似我在这里写的话。谢谢!为什么这个带有子查询的查询比只在我的原始查询中添加
groupby
要好?@CyberJunkie。ORDER BY子句使用了未聚合的列或GROUP BY子句中的列。这在MySQL中是可以接受的,但在任何其他数据库中都不能接受。更好的版本应该是说“ORDER by MIN(categories.date_created)”或类似我在这里所说的话。