2016-08-31 13 views
1

Magentoモジュールでカスタムレポートを作成していますが、私はこの問題でSQLに苦労しています。私は以下のSQLを入れました、そして基本的に、私はこれを 'donor'テーブルの各行に1行戻したいと思います。基本的には、特定の属性を持つ製品の売上総額を取得しています。すべての製品ではなく、持っているだけのもののために売上高の合計、どのように見えるか、MySQLのクエリ3テーブル内部の結合が1行だけを返す

SELECT b.entity_id AS 'Car ID', b.car_name AS 'Car Name', b.car_purchase_price AS 'Car Purchased For', SUM(s.price) AS 'Total Sales' 
FROM sales_flat_order_item AS s 
INNER JOIN catalog_product_entity_int AS c ON s.sku = c.entity_id 
INNER JOIN bs_donor AS b ON c.value = b.entity_id 
WHERE c.attribute_id = '971' 

これは動作しますが、でも、1行のみを返すには、約20のbs_donorテーブルにあると思った、そしてそれはまた返しますその特定の属性セット。私は、クエリの最後にこれを追加した場合:

AND c.value = '50' 

それは正しいデータを取得し、私が必要とする正確に何であるが、明らかに単に「50」のIDまたは何でも、私はセットを持っているbs_donor行のそこ。内部結合にエラーがあると仮定しており、ネストされたサブクエリを使用しようとしましたが、ただ失われます。

私は、bs_donorの代わりにsales_flat_order_itemからデータを取得している可能性がありますが、それ以外の方法でデータを取得することはできません。

ご協力いただければ幸いです。

答えて

0

bs_donorテーブルが最初に表示されるように、ジョインを行う順序を逆にすることができます。次にの代わりにLEFT JOINを使用して、bs_donorのすべてのレコードが結果セットに表示されるようにします。

SELECT b.entity_id AS 'Car ID', 
     SUM(s.price) AS 'Total Sales' 
FROM bs_donor b 
LEFT JOIN catalog_product_entity_int c 
    ON c.value = b.entity_id 
LEFT JOIN sales_flat_order_item s 
    ON s.sku = c.entity_id 
WHERE c.attribute_id = '971' 
GROUP BY b.entity_id 
+0

完璧、ありがとうTim!ソリューションと説明をありがとう!次回のために常に知っておくこと。 – Shaun

+0

私はそれがジョインの順序よりもGROUP BY句を含んでいると思っています。さらに、最初の参加はインナー参加です!! – Strawberry

+0

あなたがログインするたびに変更されると思います! – Strawberry

関連する問題