我正在尝试检查记录列表是否比系统datetime
少datetime
,这些记录还必须具有等于status
的字段1
或2
。我所做的是:
SELECT SUM(m2.datetime < NOW() AND m2.status IN (1, 2)) < 0 AS result
FROM `match` m2 WHERE m2.round_id = @round_id GROUP BY m2.round_id
此查询在以下情况下不起作用:
id | datetime | status |
1 2018-11-30 18:00:00 5
2 2018-12-09 13:30:00 5
3 2018-12-15 14:00:00 5
4 2018-12-21 13:30:00 5
5 2019-01-08 17:45:00 1
从上面显示的记录列表中可以看到,我有4条状态为5
的记录,并且所有这些记录的日期都小于当前系统datetime
的日期。现在,我还有一条状态为1
的记录,该记录的日期时间小于当前日期,因此查询的结果应为true
,因为有一条记录具有{{ 1}}等于status
,并且比系统1
少datetime
。为什么查询返回假?
答案 0 :(得分:1)
如果要计数,请删除< 0
。
SELECT round_id, SUM(m2.datetime < NOW() AND m2.status IN (1, 2))AS result
FROM `match` m2
WHERE m2.round_id = @round_id
GROUP BY m2.round_id
或者更好的是,将条件移至where
子句:
SELECT COUNT(*) AS result
FROM `match` m2
WHERE m2.round_id = @round_id AND
m2.datetime < NOW() AND m2.status IN (1, 2)
答案 1 :(得分:1)
比较永远不会返回小于0的值,因为如果我正确理解了您想返回true的话,就不需要比较,而且我也看不到SUM的需要,所以我将查询更改为
SELECT (m2.datetime < NOW() AND m2.status IN (1, 2)) AS result
FROM `match` m2 WHERE m2.round_id = @round_id