LIMIT在日期时间比较中不起作用

时间:2015-01-10 11:46:39

标签: php mysql datetime limit

当我执行准备好的声明时:

select SQL_CALC_FOUND_ROWS * from entries where ( START_DATE >= ? ) limit 300, 400

其中START_DATE的类型为datetime我得到的结果与我运行的结果相同

select SQL_CALC_FOUND_ROWS * from entries where ( START_DATE >= ? ) limit 0, 400

这意味着我在第一个查询中显示400个结果,而不是100个!那是为什么?

额外信息:

我使用SQL_CALC_FOUND_ROWS因为我然后执行查询select FOUND_ROWS(),因为我需要总结果计数才能应用我的分页功能,以便每页显示100个条目。像上面这样的一个查询返回大约35k的总结果(350页)。

对于同一个表中的其他查询,情况并非如此。例如,查询:

select SQL_CALC_FOUND_ROWS * from entries where ( NATIONALITY = ? ) limit 100, 200

仅成功返回100个结果。对于其他列也是如此。只有datetime类型的问题似乎有问题。

1 个答案:

答案 0 :(得分:1)

我的意见 - 你在思想中混淆了一些东西并误解了LIMIT的语法理念。

根据文件:

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

因为@zerkms在评论中注意到了:

LIMIT [OFFSET, ] NUMBER

这意味着在你的情况下:

limit 300, 400

必须在300之后返回最多400行: - )

如果你想知道为什么

select SQL_CALC_FOUND_ROWS * from entries where ( NATIONALITY = ? ) limit 100, 200

仅成功返回100个结果。

我唯一的猜测是你的SQL结果没有任何LIMIT只包含200行(where ( NATIONALITY = ? )

所以没有魔法,但是从你的问题来看,就像你期望LIMIT 100,200对你来说意味着“从结果中返回第100行和第200行之间的行” - 但这不是LIMIT如何工作