如何获取GROUP CONCAT(php,mysql)每个不同值的出现次数

我知道这很容易做到,但是我还没有正确的方法来做.我找到了Here,但与我需要的有所不同,并且没有做出积极的贡献.有人帮忙.

我有这样的桌子

name |status
-------------
mike |yes
mike |yes
mike |no
mike |ney
john |no
john |ney
john |yes

我想输出这样的东西

name |status           |total
------------------------------
mike |yes-2,no-1,ney-1 | 4
john |yes-1,no-1,ney-1 | 3

我尝试像这样使用GROUP_CONCAT

    result = MysqL_query("SELECT name, GROUP_CONCAT(disTINCT status) AS status 
FROM table GROUP BY name ");
        while($row = MysqL_fetch_array($result)){ 
    $st[] = $row['status'];
            $status=explode(",",$row['status']);
            $total = count($status);
            echo $row['name']."|".$row['status']."|".$total."<br><br>"; }

我想获取每个不同的$row [‘status’]的数量,如果可能的话,一种获取$total的更好方法.

编辑1

name | yes | no | ney | total
------------------------------
mike |2    |1   |1    | 4
john |1    |1   |1    | 3

第二个输出已实现Here

解决方法:

无需使用PHP,因为您可以使用纯sql获得所需的结果集:

SELECT name, GROUP_CONCAT(totalPerStatus) AS status, 
       (SELECT COUNT(*) FROM mytable WHERE name = t.name) AS total
FROM (
  SELECT name,      
         CONCAT(status, '-', COUNT(*)) AS totalPerStatus            
  FROM mytable
  GROUP BY name, status ) t
GROUP BY name;

通过子查询中的名称,状态分组,可以为每个“名称”每个“状态”计数.使用CONCAT会产生以下结果集:

name    totalPerStatus
-----------------------
john    ney-1
john    no-1
john    yes-1
mike    ney-1
mike    no-1
mike    yes-2

外部查询在totalPerStatus上使用GROUP_CONCAT生成所需的结果集.

Demo here

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...