2015-10-07 101 views
0

我有一個表叫做工程和一個表叫圖片。一個作品可以有多個圖像。我有一個work_id在表圖片鏈接到編號作品。 我正嘗試構建一個查詢來獲取所有作品以及每個作品的所有相關圖像。Mysql表加入多行

目前我可以得到所有的作品,但只有1行圖像表。 這是查詢。

SELECT w.id, w.title, i.imPath 
FROM works w 
LEFT JOIN images i ON w.id=i.work_id 
WHERE w.isActive=1 
GROUP BY w.id 
ORDER BY w.ordr 

有關如何獲取每個工作的圖像表上的所有行的任何幫助?

謝謝

回答

2

取出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 
+0

是的,你是對的但是我想要實現的是讓每個工作多圖片。如果我刪除組,那麼我會多次獲取工作數據。 – ion

+0

我已經爲答案添加了擴展名。那是你在找什麼@ion? – zedfoxus

+0

這太好了!有沒有辦法將圖像作爲數組而不是字符串?我的意思是我以後可以用php來做,但我希望儘可能地用mysql來實現。 – ion