2011-11-15 7 views
8

Come posso trovare tutti i tag di ciascuna pagina e quindi concatenare i tag in una colonna?Come trovare tutti i tag di ciascuna pagina e quindi concatenare i tag in una colonna?

Per un esempio,

tavolo pagine, tavolo

page_id 
1 
2 
3 
4 

tag, tavolo

tag_id  tag_name 
1   A 
2   B 
3   C 
4   D 

etichettato,

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

La mia domanda di lavoro,

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 

Questo è il risultato sono dopo,

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

+1 Per aver fatto molti-a-molti nel modo giusto. – NullUserException

+0

grazie NullUserException! :-) – laukok

+0

ha fatto +1 per lo stesso motivo. – toon81

risposta

1

provare senza ON p.page_id = tt.page_id e WHERE p.page_id = t.page_id; anche fare l'ultimo unirsi a uno regolare per le prestazioni.

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

mi dispiace 'ON p.page_id = tt.page_id' è stato un mio errore. – laukok

+0

np. è quasi un fine settimana, dopotutto ... oh aspetta. – toon81

+0

Ho provato la tua risposta ma restituisce solo una riga con tag ripetuti nelle colonne di 'tag' ... :( – laukok