2011-09-17 26 views
1

不知道我的問題標題有多準確,但讓我更好解釋一下。Mysql - 加入多個ID和拼接加入列?

我有兩個表:藝術家,釋放

table artist 
    artist_id, 
    artist_name 

table release 
    release_id, 
    release_artist_ids, 
    release_name 

還有更多的列名,但這些都是參與我的問題的人。

release_artist_ids可以包含一個或多個與藝術家表格對應的藝術家ID。如果同一個release_id有多個藝術家的特徵,那麼我用逗號分隔了這些ID。

所以一個例子釋放行:

1 - 2,5 - 示例性釋放

我想要做的是列表中的版本,並加入了藝術家表,以獲取參與發行的藝術家名字。

我設法加入使用IN(release.release_artist_ids),但這隻能帶回一個藝術家的名字。我想將所有參與的藝術家合併到一個返回的列中,並用管道分隔,以便稍後格式化。

+2

你真的應該擺脫逗號分隔的ID和正確正常化你的表。看到這個問題的想法:http://stackoverflow.com/q/7457643/723693 – ain

回答

3

我建議您將數據庫設計更改爲join table,它叫做release_artist,它模擬藝術家和發佈之間的多對多關係。該表應該有兩列:release_idartist_id

如果您不能更改數據庫的設計,你可以使用FIND_IN_SET,但它會很慢:

SELECT 
    release.release_id, 
    GROUP_CONCAT(artist.artist_name, '|') AS artist_names 
FROM artist 
JOIN release 
ON FIND_IN_SET(artist.id, release.release_artist_ids) 
GROUP BY release.release_id 
+0

謝謝。這工作。我沒有想過爲發行藝人制作一張額外的桌子。 – user887515