2011-11-15 23 views
8

¿Cómo puedo encontrar todas las etiquetas de cada página y luego incluir las etiquetas en una columna?¿Cómo encontrar todas las etiquetas de cada página y luego incluir las etiquetas en una columna?

Por ejemplo,

tabla de páginas, tabla

page_id 
1 
2 
3 
4 

, de la tabla

tag_id  tag_name 
1   A 
2   B 
3   C 
4   D 

etiquetado,

page_id  tag_id 
1   1 
1   2 
1   3 
3   2 
3   3 

Mi consulta de trabajo,

SELECT 
    p.page_id, 
    GROUP_CONCAT(t.tag_name ORDER BY t.tag_name ASC SEPARATOR ",") AS tags 

FROM root_pages AS p 

LEFT JOIN root_mm_pages_tags AS m 
ON p.page_id = m.page_id 

LEFT JOIN root_tags AS t 
ON t.tag_id = m.tag_id 

WHERE p.page_id = t.page_id 

Este es el resultado que busco,

page_id   tags 
1    A, B, C 
2    NULL 
3    B, C 
4    NULL 
+3

+1 Por tener muchos-a-muchos de la manera correcta. – NullUserException

+0

gracias NullUserException! :-) – laukok

+0

ha hecho +1 por la misma razón. – toon81

Respuesta

1

probarlo sin ON p.page_id = tt.page_id y WHERE p.page_id = t.page_id; también haga que la última unión sea regular para el rendimiento.

SELECT 
    p.page_id, 
    GROUP_CONCAT(t.tag_name ORDER BY t.tag_name ASC SEPARATOR ",") AS tags 

FROM root_pages AS p 

LEFT JOIN root_mm_pages_tags AS m 
ON p.page_id = m.page_id 

JOIN root_tags AS t 
ON t.tag_id = m.tag_id 

GROUP BY p.page_id 
+0

lo siento 'ON p.page_id = tt.page_id' fue mi error. – laukok

+0

np. es casi fin de semana, después de todo ... oh espera. – toon81

+0

He intentado con tu respuesta, pero solo devuelve una fila con etiquetas repetidas en las columnas de 'tag' ... :( – laukok

Cuestiones relacionadas