2016-10-30 21 views
0

我有查詢與連接(在Magento):如何過濾樓層計算值選擇連接,它不是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

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

但出於某種原因在那裏我嘗試WHERE count > 0rating_value IS NOT NULL它表示主題欄rating_value,count不存在,我做錯了什麼?

謝謝!

回答

1

正確。在SELECT中定義的列別名不能用於WHERE。你需要一個子查詢或重複表達:

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

這相當於:

WHERE rating.rating_summary IS NOT NULL 

count需要在HAVING條款去,我會爲寫:

HAVING count = 0 OR rating_value IS NOT NULL 

我也希望你的查詢有一個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;