我正在尝试使用SELECT COUNT(*)查找数据库中不同内容的数量。问题是当零 -
例如,
SELECT COUNT(*) FROM `images` WHERE `approved` = '1'
如果没有结果,我仍然会返回0并且可以检查$result['COUNT(*)']
。
但是有了这个查询,
SELECT COUNT(*) , `first_name` , `last_name` , `email`
FROM `images`
WHERE `approved` = '0'
AND (
`first_name` = ''
AND `last_name` = ''
AND `email` = ''
)
GROUP BY `first_name` , `last_name` , `email`
我得到一个空的结果集。
如果没有结果,如何通过此查询获得0?
答案 0 :(得分:4)
听起来我想要进行分组,但只计算已批准的分组。
SELECT COUNT(CASE WHEN approved = '0' THEN 1 END) AS Cnt,
first_name , last_name , email
FROM images
GROUP BY first_name , last_name , email;
答案 1 :(得分:1)
原因是第一个是简单的聚合查询,它返回单个序数值。第二个查询是一个按查询分组,它返回一行,一个结果元组。由于查询具有不同的返回类型,因此它们具有不同的空值。
答案 2 :(得分:1)
您正在使用此方法执行两个非常独特的操作,我会阻止此类查询。完全正确的方法是将它分成两个单独的查询,并分别运行它们。
如果需要,您可以简单地运行第二个查询而不计算,然后获取应用程序级别返回的行数,这是可以接受的,并且该计数将等于0,其中没有行返回。
答案 3 :(得分:1)
你不能用该查询“只获得零”,因为你要求它为一行。在第一个查询中,您要求的是一个单元素行,其中元素是计数 - 并且始终返回一个数字。但是在第二行中,你要求一行,当没有这样的行时,不返回任何行是正确的。
答案 4 :(得分:1)
第二个查询为每个(first_name, last_name, email)
次出现的唯一一组提供了一个结果行。如果根本没有记录,则没有(first_name, last_name, email)
组合,没有结果行,也没有COUNT(*)值......
答案 5 :(得分:0)
审核Tony Andrew's answer to another question并查看他如何使用条件选择语句执行UNION
以获得所需的行为。
答案 6 :(得分:-1)
尝试使用IsNull(first_name,''),就好像列为空,它们不会被篡改。