我想一次获取一个“页面”的结果;我希望页码成为一个参数(在 JDBC 准备语句中)。考虑以下片段
SELECT * FROM thread t ORDER BY t.id LIMIT ((? - 1) * 20), 20
理想情况下,对于第 1 页,这将导致 LIMIT 0, 20
。
当我测试
SELECT * FROM thread t ORDER BY t.id LIMIT ((1 - 1) * 20), 20
我被告知我有一个语法错误。不过,我不明白它可能是什么——这只是一些简单的数学运算。它告诉我的只是
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '((1 - 1) * 20), 20' at line 1
我的 LIMIT
子句有什么问题,我该如何解决?
最佳答案
这是不可能的。
请看这里的解决方案: MySQL Math and COUNT(*) in LIMIT
我建议使用 javascript 或其他东西来处理第一个参数(即偏移量),例如:
第一页上的 limit 0,20
和第二页上的 limit 21,20
...
例如,如果您的第一个页面在 url www.example.com?page=1 中有一个 get 变量
offset = (page - 1)*20 ;
row_count = 20;
select * from table limit (offset, row_count);
关于mysql - 使用 LIMIT 对 MySQL 查询中的结果进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728704/