问题描述
||
我正在尝试创建实质上返回true或false的MySQL查询。我想跑步
SELECT COUNT(id)
FROM comments
WHERE comment_date >= 1306904400
AND user_id = 1
因此,如果该用户本月在论坛上发布了10次,我希望它只返回1,否则我希望它返回0表示他们还没有。
在sql中有效吗?
解决方法
如果您不介意MySQL特定的内容,则可以使用
IF
:
select if(count(id) >= 10,1,0)
from comments
where comment_date >= 130690440
and user_id = 1
或MySQL布尔值(对于true为1,对于false为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
, 使用CASE
:
SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS `flag`
FROM `comments`
WHERE `comment_date` >= 1306904400 AND `user_id` = 1
, 您无需计算所有匹配记录,只需查找是否存在。不幸的是,MySQL似乎不像Microsoft SQL Server那样支持ѭ8。但是,您可以使用带有ѭ9的子选择来伪造它:
SELECT COUNT(1) AS has_comments FROM (SELECT id FROM comments WHERE comment_date >= 1306904400 AND user_id = 1 LIMIT 0,1) t;
, 我知道这是一个旧线程,但这是完成此操作的另一种方法:
SELECT COUNT(id),1 % (1 + count(id)) as greaterThanZero
FROM comments
WHERE comment_date >= 1306904400
AND user_id = 1
, 也许:
SELECT (SELECT COUNT(id) FROM comments
WHERE comment_date >= 1306904400 AND user_id = 1) > 10
, 我使用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();