当我执行准备好的声明时:
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
类型的问题似乎有问题。
答案 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如何工作