Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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 - Fatal编程技术网

Php 按条件分组

Php 按条件分组,php,mysql,Php,Mysql,我必须在php中显示一些数据,数据结构如下 id channel_id added_by 1 1 9999 2 1 195 3 8 9999 4 1 180 5 1 195 6 8 9999 7 1 9999 8 1 195 9 8 9999 channel

我必须在php中显示一些数据,数据结构如下

id  channel_id  added_by

1     1          9999
2     1          195
3     8          9999
4     1          180
5     1          195
6     8          9999
7     1          9999
8     1          195
9     8          9999
channel_id   total  added_by

1            2           9999
1            4          -1
我只需要像这样显示通道id=1的总计数

id  channel_id  added_by

1     1          9999
2     1          195
3     8          9999
4     1          180
5     1          195
6     8          9999
7     1          9999
8     1          195
9     8          9999
channel_id   total  added_by

1            2           9999
1            4          -1
所有通道id的类似计数(通过9999相加)和所有其他相加的值均假定为(-1)

我能像你一样做这件事

SELECT channel_id, added_by, sum(id) as total 
from table 
where channel_id = 1 
group by channel_id  ,added_by;
但它给出的结果不是我所需要的

channel_id  added_by total 
1            9999      2
1             195      3
1             180      1
使用表达式,您可以确定“修改的”
added\u by
值,并改为对修改后的值进行分组

另外,
SUM(id)
也不会给出正确的行数。它宁愿将
id
值相加。您可以改为使用来计算行数:

SELECT channel_id, 
       CASE 
         WHEN added_by <> 9999 THEN -1 
         ELSE 9999 
       END AS modified_added_by, 
       COUNT(*) as total 
FROM your_table_name 
WHERE channel_id = 1 
GROUP BY channel_id, modified_added_by

使用表达式,您可以确定由添加的“修改的”值,并对修改后的值进行分组

另外,
SUM(id)
也不会给出正确的行数。它宁愿将
id
值相加。您可以改为使用来计算行数:

SELECT channel_id, 
       CASE 
         WHEN added_by <> 9999 THEN -1 
         ELSE 9999 
       END AS modified_added_by, 
       COUNT(*) as total 
FROM your_table_name 
WHERE channel_id = 1 
GROUP BY channel_id, modified_added_by

您可以尝试以下方法:

SELECT channel_id,
if(9999,9999,-1) as added_by,
sum(id) as total
from table
where channel_id = 1
group by channel_id,added_by;
您可以尝试以下方法:

SELECT channel_id,
if(9999,9999,-1) as added_by,
sum(id) as total
from table
where channel_id = 1
group by channel_id,added_by;

希望这对你有帮助


选择count(*)作为总计,channel_id,added_by from table group by channel_id,added_by

希望这对您有所帮助

选择count(*)作为总计,channel_id,added_by from table group by channel_id,added_by


它将如何在按列添加的\u中生成-1。它将如何在按列添加的\u中生成-1。