2012-08-13 499 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