1

このMySqlクエリが部分的に機能しています:

SELECT p.product_id, p.product_name, p.sales, 
   p.length, p.hits, COUNT(w.product_id) AS favorites 
   FROM `products` AS p, `products_mf_xref` AS m, 
   `wishlist_items`  AS w 
 WHERE m.manufacturer_id = '1' 
   AND p.product_id = m.product_id 
   AND m.product_id = w.product_id 
 GROUP BY m.product_id ORDER BY p.product_id ASC

テーブルからいくつかのフィールドを復元し、これらの製品が別のテーブルで参照されている回数を取得しようとしています (この最後のテーブルは「ウィッシュリスト」と呼ばれていました)。クエリは正常に動作していますが、ウィッシュ リスト テーブルで少なくとも 1 回参照されている製品しか取得できません。

count(*) は意味のある NULL 値を取得しないことを読みましたが、ウィッシュ リスト テーブルで参照されていない製品、つまり COUNT(w.product_id) が「0」に等しい製品も必要です。

null 値を含むすべての製品を回復するためのアイデアはありますか? クエリを変更するアイデアはありますか? 頭おかしくなるぞ!!

前もって感謝します!

4

1 に答える 1

1

左結合を使用します。

SELECT p.product_id, p.product_name, p.sales, 
   p.length, p.hits, COUNT(w.product_id) AS favorites 
   FROM `products` AS p 
   LEFT JOIN `products_mf_xref` AS m 
       ON p.product_id = m.product_id AND m.manufacturer_id = '1' 
   LEFT JOIN `wishlist_items`  AS w ON m.product_id = w.product_id 
 GROUP BY m.product_id ORDER BY p.product_id ASC

ちなみに、可能な限りJOINを使用してデータの関係をミラーリングし、フィルターにはWHEREを使用します

于 2012-05-01T00:39:13.587 に答える