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)”或类似我在这里所说的话。