2

对不起,如果标题不是很清楚...

我有两张桌子productsimages

上有关productsproduct_id= imagesproduct_id,

images每个产品在桌子上都有几张与之相关的图像,

两个表都有一个列宽值,我希望按(product_orderimage_order)排序。

我正在寻找的结果是一个列表,published products其中每个产品只有一个图像(和一个结果),图像应该是列中值最低的那个image_order

我从我在这里找到的其他答案中汇总了下面的代码并且它正在工作,唯一的问题是该列image_order允许重复,因此在image_order我得到每个产品的多个结果时,相同产品的图像具有相同的值。

SELECT products.*, images.image_name, images.image_order

FROM products

LEFT JOIN images ON (
    images.product_id = products.product_id 
    AND images.image_order = (
        SELECT min(image_order) 
        FROM images 
        WHERE product_id = products.product_id
    )
)

WHERE products.published = 1
ORDER BY products.product_order ASC

编辑(我的表):

餐桌产品

product_id  |  product_name  |  product_order
____________|________________|_________________
     1      |  Fist Product  |        1
     2      | Second Product |        2
     3      | Third Product  |        3

表格图像

 image_id   |   product_id   |    image_name    |  image_order
____________|________________|__________________|_________________
     1      |       1        |  Fist Image URL  |        1
     2      |       1        | Second Image URL |        1
     3      |       2        | Third Image URL  |        1
     4      |       3        | Fourth Image URL |        1

我从这个查询中得到的结果:

  1. 第一个产品 + 第一个图像

  2. 第一个产品 + 第二个图像

  3. 第二个产品+第三个图像

  4. 第三产品 + 第四图像

我需要的结果:

  1. 第一个产品 + 第一个图像

  2. 第二个产品+第三个图像

  3. 第三产品 + 第四图像

4

1 回答 1

3

你可以使用这样的东西,但这不是最好的选择。随着您对表格的进一步了解,可能会有更好的答案:

select products.*,
(
    select image_name from images
    where product_id = products.product_id
    order by image_order asc
  limit 1
) as 'image_name'
from products
WHERE products.published = 1
ORDER BY products.product_order ASC
于 2012-12-04T17:10:10.613 回答