Sql,在列上动态获取具有产品ID的类似行到单行中的列

时间:2014-11-03 11:55:13

标签: mysql sql

我有这样的表:

的产品

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

这是我到目前为止尝试得到的结果,但是

  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

1 个答案:

答案 0 :(得分: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`;