2010-09-08 28 views
33

Tengo dos tablas, palabras clave y datos.¿Cómo se agrupan las filas de MySQL con el mismo valor de columna en una fila?

Las palabras clave de tabla tienen 2 columnas (id, palabra clave), los datos de tabla tienen 3 columnas (id [clave externa de keywords.id], nombre, valor).

estoy usando esta consulta:

SELECT k.id, d.value, d.name 
FROM keywords AS k 
INNER JOIN data as d ON k.id = d.id 

se vuelve algo así como:

1 123 name1 
1 456 name2 
2 943 name1 
3 542 name1 
3 532 name2 
3 682 name3 

Cada id puede tener valores de 0 a 3 (tal vez más en el futuro).

¿Cómo puedo recuperar todas las filas con la misma identificación en la misma fila?

Como

1 123 456 
2 943 
3 542 532 682 

quiero hacer esto porque quiero ser capaz de ordenar los valores.

+2

Este es el tipo de transformación que sería mejor hacer en el lado de la aplicación, en lugar de pedirle a MySQL que lo haga. – Amber

+0

Estoy de acuerdo con Amber, aunque si todavía desea hacer con SQL solamente, hmm .. Me gustaría googlear detalles para las funciones "concat" y "group by" sql. –

+0

Quiero hacer esto porque quiero ser capaz de ordenar los valores, por lo que sería genial si pudiera obtenerlo ordenado desde mysql directamente. ¿Sabes cómo puedo ordenar fácilmente cada columna que lo almacena en una matriz php? – jarkam

Respuesta

59

Uso GROUP_CONCAT() así:

SELECT k.id, GROUP_CONCAT(d.value) 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 

Además, es posible que tenga que hacer para conseguir ORDER BY d.name orden exacto de los valores como desee. De esta manera:

SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ') 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 
+0

Sí, olvidé GROUP BY ... – jarkam

+0

¿Olvidó el' GROUP BY k.id'? – Amber

+0

@Jarkam, porque no ha usado 'GROUP BY k.id' en esta consulta. – shamittomar

Cuestiones relacionadas