我強烈建議您修復當前的數據庫結構這樣你就不會存儲在數據一個逗號分隔的列表。您應該構建您的表類似於以下內容:
CREATE TABLE posts
(`id` int, `header` varchar(3), `text` varchar(3))
;
CREATE TABLE pics
(`id` int, `name` varchar(3), `url` varchar(3))
;
CREATE TABLE post_pics
(`post_id` int, `pic_id` int)
;
然後,您可以通過連接表很容易地得到一個結果:
select p.id,
p.header,
p.text,
c.name,
c.url
from posts p
inner join post_pics pp
on p.id = pp.post_id
inner join pics c
on pp.pic_id = c.id;
見SQL Fiddle with demo。
如果你不能改變你的表,那麼你應該能夠使用FIND_IN_SET
查詢:
select p.id, p.header, p.text, p.pics,
c.id c_id, c.name, c.url
from posts p
inner join pics c
on find_in_set(c.id, p.pics)
見SQL Fiddle with Demo。
編輯,如果你想要數據顯示爲逗號分隔列表,那麼你可以使用GROUP_CONCAT
。
查詢1:
select p.id,
p.header,
p.text,
group_concat(c.name separator ', ') name,
group_concat(c.url separator ', ') url
from posts p
inner join post_pics pp
on p.id = pp.post_id
inner join pics c
on pp.pic_id = c.id
group by p.id, p.header, p.text;
見SQL Fiddle with Demo
查詢2:
select p.id, p.header, p.text, p.pics,
group_concat(c.name separator ', ') name,
group_concat(c.url separator ', ') url
from posts p
inner join pics c
on find_in_set(c.id, p.pics)
group by p.id, p.header, p.text, p.pics;
見SQL Fiddle with Demo
你爲什麼要保存,你需要加入一個逗號分開的名單?請規範化表結構。 – Taryn
第1步:重新設計表格,使其正確歸一化。步驟2)在規範化之後,使用普通的常規JOIN查詢。 –
'pics' CSV列表可以做一個單獨的表格,規範化數據。如果圖片只出現在單個帖子中,爲'pics'表添加'post_id'鍵就足夠了。 – Orbling