我想在一个时间去取结果的“页面”; 我希望页码为参数(在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):你在你的SQL语法错误; 检查对应于你的MySQL服务器版本使用附近的正确语法手册 - 第1行“((11)* 20),20”
我在做什么毛病我LIMIT
条款,我怎么能解决这个问题?
MySQL的需要,限制语法数字常量。
从http://dev.mysql.com/doc/refman/5.7/en/select.html :
LIMIT子句可以被用来限制SELECT语句返回的行数。 LIMIT取一个或两个数字参数,它必须都是非负整数常数,但以下情况除外:
计算在Java端不断。
这不能做。
见这里的解决方案: 在LIMIT MySQL的数学和COUNT(*)
我会建议使用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);
定义偏移量的查询。
例如
如果你想页面-1(1-10记录)偏移量= 0,上限= 10; 对于页面-2偏移量(记录11-20)= 20,限制= 10; 并使用以下查询:
SELECT column FROM table LIMIT {someLimit} OFFSET {someOffset};
例:
SELECT column FROM table
LIMIT 10 OFFSET 10;