2014-04-07 54 views
0

我有2個表。一個是proucts列表,第二個是與每個產品相關的圖像列表。
的MySQL 加入2表,顯示結果從2行中的一列

產品爲P

ID | NAME 
1 | apple 
2 | plum 
3 | carrot 
4 | strawberry 
5 | pie 


圖像作爲IM

PRODUCT_ID | IMAGE | I_NAME 
1 | 1 | app_abc.jpg 
1 | 2 | apple.jpg 
1 | 3 | appleonemoretime.jpg 
2 | 1 | plum.jpg 
2 | 2 | plum2.jpg 
2 | 3 | plum3.jpg 
2 | 4 | plum4.jpg 
3 | 1 | somecarrot.jpg 
4 | 1 | s1.jpg 

等...

附加信息:
- 每個產品都有分鐘1個圖像。
- 圖像與一個產品連接的最大數量爲60。我想獲得:產品清單,圖像名稱(一行=一種產品)
- 我將通過product.id搜索產品 - 我想要在一列中獲取圖像,以逗號分隔,我不想獲得60'空'列。

例如:如果我搜索p.id(1,3)我想獲得這樣的:

P.ID | IM1.I_NAME 
1 | app_abc.jpg, apple.jpg, appleonemoretime.jpg 
3 | somecarrot.jpg 

有沒有辦法? 'COALESCE'對此有好處?

我現在擁有的是:

select p.id 
from products p 
join images im on im.product_id = p.id 
where p.id in (1, 3) 

回答

1

GROUP_CONCAT是你最好的朋友,您的查詢應該是這樣的:

SELECT p.id, GROUP_CONCAT(im.i_name SEPARATOR '; ') AS images 
FROM products p 
LEFT JOIN images im ON (im.product_id = p.id) 
WHERE p.id IN (1, 3) GROUP BY p.id 
1

可以在查詢中使用group_concat。試試這個查詢,

select p.id, group_concat(im.I_NAME) 
from products p 
join images im on im.product_id = p.id 
where p.id in (1, 3) 
group by p.id 
1

試試這個:

select p.id, group_concat(im.I_NAME separator ',') from products p left join images im on im.product_id = p.id where p.id in (1, 3) group by p.id