2011-12-07 171 views
0

有沒有更有效的方法來做到這一點而不計算兩次?mysql計數比較聲明

即,如果計數爲0則返回警告圖像字符串否則返回計數。

IF(
    ((SELECT COUNT(pc.category_id) from product_categories pc WHERE pc.product_id = cp.ItemID) > 0), 
    (SELECT COUNT(pc.category_id) from product_categories pc WHERE pc.product_id = cp.ItemID), 
    "<img src=\"_imgs/warning.png\" alt=\"warning\"/>" 
) AS category_count 

回答

2

對它使用變量。 (但我認爲它的結果可以通過查詢緩存緩存)

IF(@val:=(query here), @val, "other value") AS category_count 
+0

謝謝,不知道你可以在mysql中使用變量。 – user813720

0

您可以使用NULLIFCOALESCE,例如組合。

COALESCE(NULLIF((sub-query), 0), 'other value') 

但是,您不應該在數據庫查詢中構建HTML。這意味着你不需要任何複雜的SQL,這在你的視圖中變成了一個簡單的if語句。

0

您也可以加入此表,例如: -

SELECT 
    cp.*, 
    IF(pc.cnt > 0, pc.cnt, '<img src=\"_imgs/warning.png\" alt=\"warning\"/>') 
FROM 
    cp_table cp 
    LEFT JOIN (
    SELECT product_id, COUNT(category_id) AS cnt FROM product_categories GROUP BY product_id 
) pc 
    ON pc.product_id = cp.ItemID 
0

簡單會使用COALESCE。當兩個參數相同時,NULLIF返回null,當遇到NULL時,COALESCE幫助我們返回一個默認值。

select COALESCE(NULLIF(COUNT(pc.category_id),0),"<img src=\"_imgs/warning.png\" alt=\"warning\"/>") AS category_count