Как получить количество вхождений каждого отдельного значения ГРУППЫ CONCAT (php, mysql)


Я знаю, что это очень легко сделать, но я не нашел правильного способа сделать это. я нашел кое-что Здесь, но отличное от того, что мне нужно, и пока никакого активного вклада. Кто-нибудь, пожалуйста, помогите.

У меня есть такая таблица

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

Этот второй результат был достигнут Здесь

Author: Community, 2015-06-27

1 answers

Нет необходимости использовать 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, выполненная в подзапросе, дает вам количество "статус" на "имя". Использование CONCAT приводит к следующему набору результатов:

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

Внешний запрос использует GROUP_CONCAT на totalPerStatus для получения требуемого набора результатов.

Демонстрация здесь

 4
Author: Giorgos Betsos, 2015-06-27 11:15:50