2016-02-19 49 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 ',''), ',%')