很抱歉,如果标题不是很清楚......
我有两张表products
和images
,
与products
相关。product_id
= images
。product_id
,
每个产品在images
表上都有几个与之相关的图像,
这两个表都有一个列宽值我希望ORDER BY(product_order
和image_order
)。
我正在寻找的结果是一个包含所有published
products
的列表,其中每个产品只有一个图片(和一个结果),图片应为image_order
列中值最小的一个。
我将下面的代码放在我在此处找到的其他答案中并且它正常工作,唯一的问题是列image_order
允许重复,因此image_order
中的相同值的相同产品的图像存在于{{ 1}}我每个产品都会得到多个结果。
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
我从此查询得到的结果:
Firt Product + First Image
Firt Product + Second Image
第二产品+第三图像
第三产品+ FourthImage
我需要的结果:
Firt Product + First Image
第二产品+第三图像
第三产品+ FourthImage
答案 0 :(得分: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