2016-02-19 51 views
1

我現在有兩個表等tbl_forums的MySQL:逗號Sepeared值(CSV)

uid catid tags 

1  3 1,2,,3 
2  6 1,2,,3 
3  5 8  

2. tbl_forum_tags下面

1.

id tag  isactive 

1 Tag 1 y   
2 Tag 2 y   
3 Tag 3 y   
4 kuldip y   
5 bhatt y   
6   y   
7   y   
8   y   

我想在下面的格式

uid tag  

1 Tag 1, Tag 2, Tag 3   

任何幫助表示讚賞

+0

使用GROUP_CONCAT,爲什麼是這樣的:'1,2 ,, 3'?它應該是'1,2,3' –

+1

不要有逗號分隔值。或者不要打擾使用RDBMS。簡單。 – Strawberry

+0

正確@Strawberry ..我通常正常化的所有模式,但這個數據庫結構已經在整個項目中,這意味着如果我規範化它,然後我不得不改變所有相關的查詢使用 –

回答

0

使用功能FIND_IN_SET(檢索數據等)來匹配JOIN:

SELECT f.uid, GROUP_CONCAT(t.tag) tag 
FROM tbl_forums f, tbl_forum_tags t 
WHERE FIND_IN_SET(t.id, f.tags) <> 0 
GROUP BY f.uid; 
+0

FIND_IN_SET()= 1返回只有第一個標籤。 – mitkosoft

+0

我的壞。修復。 –

+0

感謝@DylanSu –

-3

您可以使用FIND_IN_SET()> 0和GROUP BY與它們匹配:

SELECT 
    t.uid, 
    GROUP_CONCAT(tt.tag) AS tags 
FROM 
    tbl_forums t, 
    tbl_forum_tags tt 
WHERE 
    FIND_IN_SET(tt.id, t.tags) > 0 
GROUP BY 
    t.uid 

如果你想只具有有效的標籤標識,添加NOT NULL結尾:

SELECT 
    t.uid, 
    group_concat(tt.tag) AS tags 
FROM 
    tbl_forums t, 
    tbl_forum_tags tt 
WHERE 
    FIND_IN_SET(tt.id, t.tags) > 0 
GROUP BY 
    t.uid 
HAVING tags IS NOT NULL 
+1

什麼一對夫婦的雙胞胎 –

0

你需要一些更換和CONCAT:

SELECT * FROM tbl_forums 
LEFT JOIN tbl_forum_tags ON CONCAT(',', tags, ',') LIKE CONCAT('%,', REPLACE(tag,'Tag ',''), ',%')