2016-10-30 8 views
0

私は、クエリを持っているが(Magentoの中で)参加する:rating_valueまたはcount < 1ヌルではないジョインでセレクトしたときにfloor計算値をフィルタリングする方法は?

+--------------+-------+ 
    | rating_value | count | 
    +--------------+-------+ 
    |   NULL |  0 | 
    +--------------+-------+ 
    1 row in set (0,00 sec) 

ではなく、私はWHERE count > 0またはrating_value IS NOT NULLそれを試してみてください、何らかの理由でNULLを持つ行をフィルタリングするために必要とされる

SELECT FLOOR(rating.rating_summary/20) AS `rating_value`, 
      COUNT(*) AS `count` 
    FROM `catalog_product_flat_3` AS `e` 
    INNER JOIN `catalogsearch_result` AS `search_result` ON search_result.product_id=e.entity_id 
    AND search_result.query_id='218' 
    INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id 
    AND price_index.website_id = '1' 
    AND price_index.customer_group_id = 0 
    INNER JOIN `review_entity_summary` AS `rating` ON rating.entity_pk_value = e.entity_id 
    AND rating.store_id = 0; 

その件名欄rating_valuecountは存在しません、どうしたらいいですか?

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

答えて

1

正しい。 SELECTで定義されている列エイリアスは、WHEREでは使用できません。あなたは、サブクエリを必要とするか、式を繰り返す:

WHERE FLOOR(rating.rating_summary/20) IS NOT NULL 

これは同等です:

HAVING count = 0 OR rating_value IS NOT NULL 
:私のように書くでしょう HAVING句に行くに

WHERE rating.rating_summary IS NOT NULL 

countニーズ

また、クエリにはGROUP BYという句がありますが、これは紛れているようです。

だから私はあなたが欲しい疑う:

SELECT FLOOR(rating.rating_summary/20) AS `rating_value`, 
     COUNT(*) AS `count` 
FROM `catalog_product_flat_3` pf INNER JOIN 
    `catalogsearch_result` sr 
     ON sr.product_id = pf.entity_id AND 
     sr.query_id = 218 INNER JOIN 
     `catalog_product_index_price` pip 
     ON pip.entity_id = pf.entity_id AND 
     pip.website_id = 1 AND 
     pip.customer_group_id = 0 INNER JOIN 
     `review_entity_summary` r 
    ON r.entity_pk_value = pf.entity_id AND r.store_id = 0 
GROUP BY FLOOR(r.rating_summary/20) 
HAVING `count` = 0 OR rating_value IS NULL; 
関連する問題