0

製品、classid、optionid、'images'のリスト(4つのテーブルから)を生成しようとしています。各製品には多くのClassID(1対多)を含めることができ、各ClassIDには多くのOptionIDを含めることができ、各OptionIDには多くの画像を含めることができます。最後に、画像テーブル(xcart_images_D)について、各productIDに含まれる画像の数をcount()したいと思います。複数のステートメントを使用せずに、このすべての情報を効果的にクエリするにはどうすればよいですか?

各テーブルの基本情報は次のとおりです

xcart_products
    + productid*
    + product
xcart_classes - 
    + classid*
    + productid (xcart_products.productid)
xcart_class_options -
    + optionid*
    + classid (xcart_classes.classid)
    + option_name
xcart_images_D - 
    + imageid*
    + optionid (xcart_class_options.optionid)
+ id (xcart_products.productid)

 * primary/foreign key

3つのテーブル結合が機能していますが、xcart_images_Dテーブルを機能させることができず、カウントをどのように実行するかがわかりません。誰かが私を正しい方向に向けることができますか?

ここで価値があるのは、私の3つのテーブル結合です。

SELECT xp.productid, xp.product, xc.classid, xco.optionid, xco.option_name
FROM xcart_products xp
JOIN xcart_classes xc ON xp.productid = xc.productid and xc.class = 'Color'
JOIN xcart_class_options xco ON xc.classid = xco.classid
WHERE xc.class = 'Color'
ORDER by xp.productid DESC

次の行を追加しようとすると、結果の数が約半分に減少します。

 JOIN xcart_images_D xi ON xi.optionid = xco.optionid
 GROUP BY xp.productid
4

1 に答える 1

1
SELECT xp.productid, count(xi.imageid)
FROM xcart_products xp 
INNER JOIN xcart_classes xc ON xp.productid = xc.productid AND xc.class = 'Color'
INNER JOIN xcart_class_options xco ON xc.classid = xco.classid 
INNER JOIN xcart_images_D xi ON xi.optionid = xco.optionid
GROUP BY xp.productid
ORDER by xp.productid DESC 
于 2012-04-04T23:07:32.753 に答える