2012-02-23 12 views
1

私は製品情報を収集するいくつかのSQLを持っています。また、結合されたテーブルからイメージを取得します。商品に複数の画像が含まれることがあります(場合によっては表示されない場合もあります)。これにより結果に重複が生じます。このクエリを変更して、結合されたイメージテーブル(image_d、image_p、image_t)から1つのイメージ(またはイメージなし)のみを返すにはどうすればよいですか?複数の結合テーブルから1つのイメージ行だけを返す方法はありますか?

SELECT 
    products_categories.categoryid, 
    products.productid, 
    products.product, 
    products.descr, 
    products.rating, 
    products.title_tag, 
    images_d.image_path AS imaged, 
    images_p.image_path AS imagep, 
    images_t.image_path AS imaget, 
    clean_urls.clean_url 
FROM products_categories 
INNER JOIN products ON products_categories.productid = products.productid 
LEFT JOIN images_d ON products.productid = images_d.id 
LEFT JOIN images_p ON products.productid = images_p.id 
LEFT JOIN images_t ON products.productid = images_t.id 
LEFT JOIN clean_urls ON products.productid = clean_urls.resource_id 
WHERE products_categories.categoryid = 265 
AND products_categories.main = 'Y' 
AND products.forsale = 'Y' 
ORDER BY productid 

ありがとうございました。

答えて

1

与えられたimage_xテーブルに複数のイメージがあるとします。あなたは1つのCSVの列に複数の値を押し込もするgroup_concat()を使用することができます。

SELECT 
    products_categories.categoryid, 
    products.productid, 
    products.product, 
    products.descr, 
    products.rating, 
    products.title_tag, 
    group_concat(images_d.image_path) AS imaged, 
    group_concat(images_p.image_path) AS imagep, 
    group_concat(images_t.image_path) AS imaget, 
    clean_urls.clean_url 
FROM products_categories 
INNER JOIN products ON products_categories.productid = products.productid 
LEFT JOIN images_d ON products.productid = images_d.id 
LEFT JOIN images_p ON products.productid = images_p.id 
LEFT JOIN images_t ON products.productid = images_t.id 
LEFT JOIN clean_urls ON products.productid = clean_urls.resource_id 
WHERE products_categories.categoryid = 265 
AND products_categories.main = 'Y' 
AND products.forsale = 'Y' 
GROUP BY 1,2,3,4,5,6,10 
ORDER BY productid 
+0

動作するようには思えない、私はまだのは、返された重複した商品コードを取得します。 –

+0

@stackasker:重複した製品が複数のカテゴリに属している可能性がありますか? –

+0

@AndriyM:いいえ、そうではありません。 2でグループ化するように提案されたクエリを変更すると、正しい結果が返されるようです。より多くの睡眠、より多くのテスト。 –

関連する問題