2014-11-03 48 views
-1

我有表所示:SQL中,獲取包含產品ID類似的行成單排柱動態上

產品

product_id, product_primary_image,product_name 

product_image

image_id,product_id,image_url 

期望的結果:

product_id product_primary_image product_name image_url1 image_url2 image_url3 

This是我迄今試圖得到的結果,但

SELECT `product`.`product_id`,`product`.`product_name`,`product`.`product_primary_image`,`product_image`.`image_url` FROM `product_image` LEFT JOIN `product` ON `product`.`product_id` = `product_image`.`product_id`; 

但它給予了把作爲

product_id product_name product_primary_image image_url 

99   301R   Maroon1.jpg    Maroon3.jpg 

99   301R   Maroon1.jpg    Maroon2.jpg 

99   301R   Maroon1.jpg    Maroon.jpg 

我想要的結果作爲

product_id product_name product_primary_image image_url1  image_url2  image_url3 

99   301R   Maroon1.jpg    Maroon3.jpg  Maroon2.jpg  Maroon.jpg 
+0

使用反引號的強烈暗示MySQL的,所以我刪除了其他數據庫的標籤。 – 2014-11-03 11:59:44

+0

每種產品的圖像是否有固定的最大數量? I.E.結果表中需要多少列? – LeeG 2014-11-03 16:32:57

+0

@LeeG最多7個圖像列,但我們可以做到動態? – 2014-11-04 09:39:12

回答

1

得到什麼最簡單的方法您需要將圖像放入帶有分隔符的單個列中:

SELECT p.`product_id`, p.`product_name`, p.`product_primary_image`, 
     gruop_concat(pi.`image_url`) as urls 
FROM `product_image` pi LEFT JOIN 
    `product` p 
    ON p.`product_id` = pi.`product_id`; 

編輯:

你可以得到三列,如果你喜歡,用substring_index()

SELECT p.`product_id`, p.`product_name`, p.`product_primary_image`, 
     min(pi.image_url) as url1, 
     substring_index(substring_index(gruop_concat(pi.`image_url`), ',', 2), ',', -1) as url2, 
     max(pi.image_Url) as url3 
FROM `product_image` pi LEFT JOIN 
    `product` p 
    ON p.`product_id` = pi.`product_id`; 
+0

正如我已經描述了上述情況所需的結果 – 2014-11-03 16:21:27

+0

我們可以爲我的情況做到這一點嗎? – 2014-11-04 09:40:40