Как получить количество вхождений каждого отдельного значения ГРУППЫ 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
Этот второй результат был достигнут Здесь
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
для получения требуемого набора результатов.
Демонстрация здесь