需要引号不要在DATE()
包裹列优化器不能在该列使用索引..加上我会绑定变量使用PDO或mysqli而不是concatting他们..
当我有日期比较在我的代码与日期输入,我几乎总是你se:
SELECT ...
FROM table t
WHERE t.time >= :min_date
AND t.time < :max_date + INTERVAL 1 DAY
它确切地涵盖日期之间的所有时间没有打破索引。 它还假定所提供的日期是包含性的..这对于UI是合乎逻辑的。
你的情况,这将是:
$aFilter = ' AND c_win >= "'.$date_min.'" AND c_ig.date_gain < "'.$date_max.'" + INTERVAL 1 DAY';
BONUS信息
如果你想知道为什么你的查询运行,但没有给出正确的结果..
AND c.win > 2008-05-13 AND c_ig.date_gain < 2015-05-05
不带引号的
评估为整数:
AND c.win > 1990 AND c_ig.date_gain < 2005
,然后隐式转换为:
AND c.win > "1990-01-01 00:00:00" AND c_ig.date_gain < "2005-01-01 00:00:00"
另一个很好的理由不来连接查询字符串。
日期在查询中使用时必须加引号。 –