三个关键细节。
我是通过phpMyAdmin中的SQL查询函数直接执行此操作
正在运行的查询如下:
json.extract! @experiment, :id, :name, :description, :created_at, :updated_at
我的数据如下:
SELECT * FROM `leaderboard`
WHERE date > (CURRENT_DATE() - 30)
ORDER BY time DESC
这是我表中的所有数据,但也是我运行此查询时得到的确切响应。让我感到困惑的是,当前日期(2016-08-16)至少比2016-07-04还要早40天,那么为什么ID 46会被作为有效结果通过?
更新:此外,查询
id room team time fte date
46 adod Old But Amazing 372 0 2016-07-04 15:13:56
40 adod The Inappropriates 315 0 2016-08-22 15:11:58
41 adod Chelsea Hens 254 0 2016-08-22 15:12:13
42 adod Serco-Top Of The Board 221 0 2016-08-22 15:12:44
43 adod Gradually Escaping 165 0 2016-08-22 15:13:05
44 adod The Lamb Marlborough 105 0 2016-08-22 15:13:29
45 adod Failure 0 1 2016-08-22 15:13:38
不会返回ID 46
答案 0 :(得分:3)
而不是:
(CURRENT_DATE() - 30)
使用:
SUBDATE(CURRENT_DATE(), 30)
这是因为第一个表达式使用当前日期作为YYYYMMDD格式的数字,即20160822,然后从中减去30,给出20160792,从而产生意外结果。
答案 1 :(得分:1)
DATE
是MySQL中的保留字,它的计算结果为当前日期。
因此,您的WHERE
语句是常量,它也可以WHERE 5 > 1
。它将始终选择所有行。
为该列尝试不同的名称。