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 不是这样工作的
当我执行准备语句时:
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 不是这样工作的