2012-08-13 500 views
6

我有以下查詢。mysql - 當count大於零時選擇true

SELECT COUNT(*) AS offer_count 
    FROM restaurants_offers 
WHERE DATE(NOW()) 
    BETWEEN date_start 
    AND date_end 
AND restaurant_id =1 

現在,當計數大於零,我想選擇別的truefalse,而不是數作爲查詢結果。怎麼做?

回答

14

試試這個:

SELECT IF(COUNT(*) > 0, 'true', 'false') AS NewResult 
    FROM restaurants_offers 
WHERE (DATE(NOW()) BETWEEN date_start AND date_end) AND 
     restaurant_id = 1 
+1

您可以在MySQL中使用不帶引號的「TRUE」/「FALSE」值。 – 2012-08-13 09:31:09

+1

它只會返回1和0,如果我不會引用它。 – 2012-08-13 09:34:30

+0

是的,我知道MySQL根本沒有實現布爾數據類型,SQL標準沒有將它指定爲必須的。但它比獲取兩個字符串值('true'/'false')中的一個還要好,如果在編程語言中檢查,兩者都將評估爲TRUE。 – 2012-08-13 09:40:01

1
SELECT case when COUNT(*) > 0 
      then 1 
      else 0 
     end AS offer_count 
FROM restaurants_offers 
WHERE DATE(NOW()) 
BETWEEN date_start 
AND date_end 
AND restaurant_id =1 

,或者如果你需要的話truefalse

SELECT case when COUNT(*) > 0 
      then 'true' 
      else 'false' 
     end AS offer_count 
... 
+0

爲什麼使用情況下'IF'會一直短? – 2012-08-13 09:13:25

+1

你也可以選擇。我更喜歡'case'。就這樣。 – 2012-08-13 09:14:42

1
SELECT COUNT(*) > 0 AS has_offers 
    FROM restaurants_offers 
WHERE DATE(NOW()) 
    BETWEEN date_start 
    AND date_end 
AND restaurant_id =1