2012-03-29 15 views
7

ho 2 tabelle, utenti e segue. tabella segue ha una colonna di nome status. Vorrei contare il numero di sequenze che ogni utente segue per lo stato.mysql group_concat con un conteggio all'interno?

La query seguente restituisce un record per ogni tipo di stato per ciascun utente.

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 

restituisce qualcosa di simile:

user_name  status  count 

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

ma vorrei qualcosa di più amichevole simile:

user_name  status_count 

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

provato a usare group_concat e contare, ma non ha funzionato. Qualche indizio?

risposta

13

è necessario utilizzare GROUP BY due volte, prima su (user_id, stato) da segue per ottenere i conteggi poi id_utente da tavolo unito a concat:

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

ciao amico, questo ha fatto il trucco ... –

0

Non so definizioni complete tabelle così ho query creata, che utilizza solo user_name, stato e conteggio.

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