2013-05-13 30 views
1

我必須使用MySQL數據庫,其中一些列的不同ID保存在一列中,由管道字符分隔。例如:加入管道列數據

用戶表:

id | username | groups 
1 | user1 | 1|2|3|5 

該組ID對應的基團。這說明在什麼組的用戶被放置在所以也有一個Groups表:

組表:

id | groupname 
1 | group1 
2 | group2 
3 | group3 
4 | group4 
5 | group5 

我希望做的是選擇一個用戶,然後選擇該用戶所在的所有groupnames,如JOIN。對於user1這是所有除了group4

這顯然是更容易,如果組被保存在另一個表稱爲user_groups,這可能是這樣的:

user_groups表:

fk_user_id | fk_group_id 
1   | 1 
1   | 2 
1   | 3 
1   | 5 

但不幸的是我不能改變數據庫模式,因爲整個系統已經基於此。

我想知道在單個查詢中選擇用戶時是否有明智的方式獲取所有組名。例如,結果可能看起來像這樣:

id | username | groups | groupnames 
1 | user1 | 1|2|3|5 | group1|group2|group3|group5 

是否有可能以某種方式在MySQL的一個查詢中做這樣的事情?

+0

,也許你的問題的一半可以像這樣做:http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field – gordatron 2013-05-13 15:44:35

+0

有這麼幾個類型的問題上SO – Kermit 2013-05-13 15:51:55

回答

2

在MySQL中,你可以使用find_in_set()這種類型的加入:

select * 
from user u join 
    groups g 
    on find_in_set(g.groupname, u.groups) > 0; 

在MySQL或其他數據庫,你可以使用like還有:

select * 
from user u join 
    groups g 
    on concat('|', g.groupname, '|') like concat('%|', u.groups, '|%');