使用极限进行分页在MySQL查询结果(Use LIMIT to paginate results i

2019-06-26 15:24发布

我想在一个时间去取结果的“页面”; 我希望页码为参数(在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条款,我怎么能解决这个问题?

Answer 1:

MySQL的需要,限制语法数字常量。

从http://dev.mysql.com/doc/refman/5.7/en/select.html :

LIMIT子句可以被用来限制SELECT语句返回的行数。 LIMIT取一个或两个数字参数,它必须都是非负整数常数,但以下情况除外:

  • 在预处理语句,极限参数可以使用指定? 占位符标记。

  • 存储程序中,极限参数可以使用整数值的常规参数或局部变量指定。

计算在Java端不断。



Answer 2:

这不能做。

见这里的解决方案: 在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);


Answer 3:

定义偏移量的查询。

例如

如果你想页面-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;


文章来源: Use LIMIT to paginate results in MySQL query