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

LIMIT doesn't work in datetime comparison

当我执行准备语句时:

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 个条目。像上面这样的一个查询 returns 大约 35k 总结果(350 页)。

同一 table 中的其他查询并非如此。例如,查询:

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

成功returns只有 100 个结果。其他列也是如此。只有类型 datetime 似乎有问题。

我的意见 - 你在脑海中混淆了事物并且误解了 LIMIT 语法的想法。

根据文档:

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

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

LIMIT [OFFSET, ] NUMBER

这意味着在你的情况下:

limit 300, 400

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

如果你想知道为什么

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

成功 return只有 100 个结果。

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

所以没有魔法,但从你的问题来看,就像你期待 LIMIT 100,200 对你来说意味着 "return me rows BETWEEN row 100 and row 200 from result" - 但 LIMIT 不是这样工作的