MySQL ..如果COUNT返回大于0的任何值,则返回'1'

时间:2011-06-04 03:50:09

标签: mysql sql

我正在尝试创建基本上返回true或false的MySQL查询。我想跑

SELECT COUNT(id) 
  FROM comments  
 WHERE comment_date >= 1306904400 
   AND user_id = 1 

因此,如果用户本月在论坛上发布了10次,我希望它只返回1,否则我希望它返回0表示他们没有。

这可能在SQL中有效吗?

6 个答案:

答案 0 :(得分:26)

如果您不介意特定于MySQL的内容,那么您可以使用IF

select if(count(id) >= 10, 1, 0)
from comments
where comment_date >= 130690440
  and user_id = 1

MySQL booleans(1为真,0为假):

select count(id) >= 10
from comments
where comment_date >= 130690440
  and user_id = 1

如果您想坚持使用标准SQL,那么CASE就是您的朋友:

select case when count(id) >= 10 then 1 else 0 end
from comments
where comment_date >= 130690440
  and user_id = 1

答案 1 :(得分:11)

使用CASE

SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS `flag`
FROM `comments`
WHERE `comment_date` >= 1306904400 AND `user_id` = 1

答案 2 :(得分:2)

您不需要计算所有匹配的记录,只需查找是否存在。不幸的是,MySQL似乎不像Microsoft SQL Server那样支持IF EXISTS。但是,您可以使用LIMIT的子选项伪造它:

SELECT COUNT(1) AS has_comments FROM (SELECT id FROM comments WHERE comment_date >= 1306904400 AND user_id = 1 LIMIT 0, 1) t;

答案 3 :(得分:1)

我知道这是一个老线程,但这是实现这一目标的另一种方法:

SELECT COUNT(id), 1 % (1 + count(id)) as greaterThanZero FROM comments
WHERE comment_date >= 1306904400 AND user_id = 1

答案 4 :(得分:0)

也许:

SELECT (SELECT COUNT(id) FROM comments  
WHERE comment_date >= 1306904400 AND user_id = 1) > 10

答案 5 :(得分:0)

我使用LIMIT做类似的事情,并在我的代码中进行评估。在找到10个匹配项后,SQL将停止。

SELECT id FROM {mytable}
WHERE comment_date >= 1306904400
AND user_id = 1
LIMIT 10

PHP请求至少10个帖子。

if(my_db_query() != 10)
    not_enough_posts();