タイトルがわかりにくかったらすいません…
私は2つのテーブルを持ってproducts
おりimages
、
関連上products
。product_id
= images
. product_id
、
各製品には、images
テーブルに関連するいくつかの画像があり、
product_order
両方のテーブルには、ORDER BY (および)したい列幅の値がありますimage_order
。
私が探している結果は、製品ごとに 1 つの画像 (および 1 つの結果) のみ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
このクエリから得た結果:
最初の商品 + 最初の画像
最初の商品 + 2 番目の画像
2 番目の製品 + 3 番目の画像
3 番目の製品 + 4 番目の画像
必要な結果:
最初の商品 + 最初の画像
2 番目の製品 + 3 番目の画像
3 番目の製品 + 4 番目の画像