2011-11-15 16 views
8

Làm cách nào để tìm tất cả các thẻ của mỗi trang và sau đó ghép các thẻ vào một cột?Làm thế nào để tìm tất cả các thẻ của mỗi trang và sau đó concat các thẻ vào một cột?

Đối với một ví dụ,

trang bảng, bảng

page_id 
1 
2 
3 
4 

thẻ, bảng

tag_id  tag_name 
1   A 
2   B 
3   C 
4   D 

gắn thẻ,

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

truy vấn làm việc của tôi,

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 

Đây là kết quả tôi sau đó,

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

+1 Vì đã thực hiện nhiều cách đúng đắn. – NullUserException

+0

cảm ơn NullUserException! :-) – laukok

+0

+1 cho cùng một lý do. – toon81

Trả lời

1

thử nó mà không ON p.page_id = tt.page_idWHERE p.page_id = t.page_id; cũng làm cho người cuối cùng tham gia thường xuyên để thực hiện.

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

xin lỗi 'ON p.page_id = tt.page_id' là lỗi của tôi. – laukok

+0

np. nó gần như cuối tuần, sau khi tất cả ... oh chờ đợi. – toon81

+0

Tôi đã thử câu trả lời của bạn nhưng nó chỉ trả về một hàng với các thẻ lặp lại trong các cột của 'tag' ... :( – laukok

Các vấn đề liên quan