2012-03-29 18 views
7

Ich habe 2 Tabellen, Benutzer und folgt. Die Tabelle folgt hat eine Spalte namens status. Ich möchte zählen, wie viele Benutzer nach dem Status gruppieren.mysql group_concat mit einer Zählung im Inneren?

Die folgende Abfrage gibt einen Datensatz für jeden Statustyp für jeden Benutzer zurück.

SELECT users.name as user_name, f.status, count(f.id) 
FROM users 
JOIN application_follows f ON f.user_id = users.id 
GROUP BY users.id, f.status 
ORDER BY users.id 

kehrt so etwas wie:

user_name  status  count 

mike   new   10 
mike   old   5 
tom   new   8 
tom   old   9 

aber ich möchte etwas freundlicher mag:

user_name  status_count 

mike   new,10|old,5 
tom   new,8|old,9 

versuchte Group_concat mit und aber funktionierte nicht zählen. Irgendwelche Hinweise?

Antwort

13

Sie müssen zweimal GROUP BY verwenden, zuerst auf (user_id, Status) aus folgt zählt dann auf User_id aus verknüpften Tabelle zu concat zu bekommen:

SELECT users.name, GROUP_CONCAT(CONCAT(f.status, ',', f.cnt) SEPARATOR '|') 
FROM users 
JOIN 
(SELECT user_id, status, count(id) AS cnt 
    FROM application_follows 
    GROUP BY user_id, status) f 
ON f.user_id = users.id 
GROUP BY users.id 
+0

hey mann danke, das hat den Trick ... –

0

Ich weiß nicht voll Tabellen Definitionen so ich erstellte Abfrage, die nur Benutzername, Status und Anzahl verwendet.

SELECT user_name, GROUP_CONCAT(CONCAT(status, ',', count) SEPARATOR '|') FROM users GROUP BY user_name ORDER BY user_name;