取出GROUP BY
。
SELECT w.id, w.title, i.imPath
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
ORDER BY w.ordr
這應該會給你你想要的所有行。
另一種方式來看待它:
create table works(id int, title varchar(10));
insert into works values (1, 'hello'), (2, 'world');
create table images(id int, work_id int, impath varchar(100))
insert into images values (1, 1, '/data/hello1.png'), (2, 1, '/data/hello2.png'), (3, 2, '/data/world1.png');
作品
id | title
1 | hello
2 | world
圖片
id | work_id | impath
1 | 1 | /data/hello1.png
2 | 1 | /data/hello2.png
3 | 2 | /data/world1.png
可以在你的情況下,被轉換爲這樣的事:
SELECT w.id, w.title,
GROUP_CONCAT(DISTINCT i.imPath ORDER BY i.imPath SEPARATOR ',') AS images
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
GROUP BY w.id, w.title
ORDER BY w.ordr
Result:
id | title | images
1 | hello | /data/hello1.png,/data/hello2.png
2 | world | /data/world1.png
SQLFiddle例如:http://sqlfiddle.com/#!9/b5784c/1
爲了獲得圖像的標題爲好,你可以做這樣的事情:
SELECT w.id, w.title,
GROUP_CONCAT(
DISTINCT CONCAT(i.imPath,'|',i.caption)
ORDER BY CONCAT(i.imPath,'|',i.caption)
SEPARATOR ',') AS images
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
GROUP BY w.id, w.title
ORDER BY w.ordr
是的,你是對的但是我想要實現的是讓每個工作多圖片。如果我刪除組,那麼我會多次獲取工作數據。 – ion
我已經爲答案添加了擴展名。那是你在找什麼@ion? – zedfoxus
這太好了!有沒有辦法將圖像作爲數組而不是字符串?我的意思是我以後可以用php來做,但我希望儘可能地用mysql來實現。 – ion