2012-03-29 23 views
7

tengo 2 tablas, usuarios y sigue. la tabla siguiente tiene una columna llamada estado. Me gustaría contar cuántos siguen a cada usuario agrupando por estado.mysql group_concat con un recuento dentro?

La siguiente consulta devuelve un registro para cada tipo de estado para cada usuario.

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 

vuelve algo como:

user_name  status  count 

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

pero me gustaría algo más amigable como:

user_name  status_count 

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

intentado usar GROUP_CONCAT y contar, pero no funcionó. ¿Alguna pista?

Respuesta

13

Es necesario utilizar GROUP BY dos veces, primero en (user_id, estado) de la siguiente manera para obtener el recuento de entonces user_id de tabla unida 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

hey man gracias, eso funcionó ... –

0

No sé definiciones mesas llenas, así que consulta creada, que usa solo user_name, status y count.

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