Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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/mysql/58.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/7/sql-server/25.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_Sql - Fatal编程技术网

Php MySQL在一个查询中应用多个条件

Php MySQL在一个查询中应用多个条件,php,mysql,sql,Php,Mysql,Sql,我有一个名为users的表,其中包含以下列: id login status 现在我想用PHP创建一个统计页面,我想看看有多少用户的状态为0,有多少用户的状态为1,有多少用户的状态为2 我希望以最有效的方式完成这项工作,而不必运行3个查询 现在我只知道在UNION中使用3个查询来执行此操作: (SELECT COUNT(*) FROM users WHERE status='0') UNION (SELECT COUNT(*) FROM users WHERE status='1') UNIO

我有一个名为
users
的表,其中包含以下列:

id
login
status
现在我想用PHP创建一个统计页面,我想看看有多少用户的状态为0,有多少用户的状态为1,有多少用户的状态为2

我希望以最有效的方式完成这项工作,而不必运行3个查询

现在我只知道在UNION中使用3个查询来执行此操作:

(SELECT COUNT(*) FROM users WHERE status='0') UNION (SELECT COUNT(*) FROM users WHERE status='1') UNION (SELECT COUNT(*) FROM users WHERE status='2')
我不知道太多的SQL编程,但我在想这样的东西可能会有用:

SELECT IF(status='0',stat0++),IF(status='1',stat1++),IF(status='2',stat2++) FROM users GROUP BY status

但是它不起作用,因为语法是错误的

您可以按状态分组,并像这样总结不同的状态

select status, 
       sum(status = 1) as status1_count,
       sum(status = 2) as status2_count,
       sum(status = 3) as status3_count
from users
group by status
这是MySQL语法。一般的SQL ANSI语法是

select status, 
       sum(case when status = 1 then 1 end) as status1_count,
       sum(case when status = 2 then 1 end) as status2_count,
       sum(case when status = 3 then 1 end) as status3_count
from users
group by status

查询返回一行中状态的计数

select
  sum(case when status = '0' then 1 else 0 end) as c1,
  sum(case when status = '1' then 1 else 0 end) as c2,
  sum(case when status = '2' then 1 else 0 end) as c3
from users 
where status = '0' or status = '1' or status = '2'

那很快,而且很有效!ThanksQuery1时间=0.0395s,在有50k用户的表上;查询2时间=0.0250秒,在第二次查询具有50k用户的表时,这些查询为每个状态返回2个不必要的列。当状态='0'时,它们将返回行'0',一些计数,0,0;当status='1'时,对于一个有50k用户的表,它们将返回行'1',0,some_count,0Query time=0.0240s。使用WHERE而不是GROUP BY时似乎效率更高。顺便说一句,您的查询中有错误。。。将第二个“when”替换为“then”