2010-12-30 22 views
28

Realizo mi unión de una tabla farmTOanimal como esta. Hay una mesa de farmTotool similaresmysql GROUP_CONCAT duplica

id | FarmID | animal 
1 | 1 | cat 
2 | 1 | dog 

Cuando me uno a mis tablas en una vista, aparece un resultado que tiene este aspecto

FarmID | animal | tool 
    1 | cat | shovel 
    1 | dog | shovel 
    1 | cat | bucket 
    1 | dog | bucket 

Ahora, hago GROUP BY FarmID y GROUP_CONCAT (animal) y GROUP_CONCAT (herramienta), obtengo

FarmID |  animals  |   tools 
    1 | cat,dog,cat,dog | shovel,shovel,bucket,bucket 

Pero, lo que realmente quiero es un resultado que se vea así. ¿Cómo puedo hacerlo?

FarmID | animals | tools 
    1 | cat,dog | shovel,bucket 
+0

'GROUP_CONCAT (único (' animal')) 'no funciona? –

Respuesta

92

Es necesario utilizar la opción DISTINCT:

GROUP_CONCAT(DISTINCT animal) 
+5

DISTINCT muestra el mismo contenido de filas como uno. Por ej. row1 = 'abc', row2 = 'def', row3 = 'abc'. La fila GROUP_CONCAT (DISTINCT) dará como resultado abc, def, que se supone que es abc, def, abc. ¿Cuál es la solución además de usar DISTINCT? –

+1

Gah, gracias. Probé DISTINCT, pero no lo puse dentro de GROUP_CONCAT, no estoy seguro de lo que esperaba que hiciera. Gracias. – Ryan