如何获取GROUP CONCAT(php,mysql)的每个不同值出现的次数
How to get the number of occurrence of each distinct value of GROUP CONCAT (php,mysql)
我知道这很容易做到,但我还没有找到正确的方法。我发现了一些东西 Here 但与我需要的不同并且还没有积极的贡献。有人好心帮忙
我有一个table这样的
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
。
EDIT1
name | yes | no | ney | total
------------------------------
mike |2 |1 |1 | 4
john |1 |1 |1 | 3
第二个输出已实现
不需要使用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;
在子查询中执行的 name, status
分组给出了每个 'status' 每个 '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
来生成所需的结果集。
我知道这很容易做到,但我还没有找到正确的方法。我发现了一些东西 Here 但与我需要的不同并且还没有积极的贡献。有人好心帮忙
我有一个table这样的
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
。
EDIT1
name | yes | no | ney | total
------------------------------
mike |2 |1 |1 | 4
john |1 |1 |1 | 3
第二个输出已实现
不需要使用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;
在子查询中执行的 name, status
分组给出了每个 'status' 每个 '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
来生成所需的结果集。