我正在尝试创建基本上返回true或false的MySQL查询。我想跑
SELECT COUNT(id)
FROM comments
WHERE comment_date >= 1306904400
AND user_id = 1
因此,如果用户本月在论坛上发布了10次,我希望它只返回1,否则我希望它返回0表示他们没有。
这可能在SQL中有效吗?
答案 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();