7

我想一次获取我的结果一个“页面”;我希望页码是一个参数(在 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 行的 '((1 - 1) * 20), 20' 附近使用正确的语法

我的LIMIT条款做错了什么,我该如何解决?

4

3 回答 3

16

这是无法做到的。

在此处查看解决方案: MySQL Math and COUNT(*) in LIMIT

我建议使用 javascript 或其他东西来处理第一个参数(即偏移量),例如: limit 0,20在第一页和limit 21,20第二页...

例如,如果您的第一页在网址 www.example.com?page=1 中有一个 get 变量

offset = (page - 1)*20 ;
row_count = 20;
select * from table limit (offset, row_count);
于 2012-07-30T20:06:37.797 回答
10

使用以下语法为查询定义偏移量

SELECT column FROM table 
LIMIT {someLimit} OFFSET {someOffset};

例如,要获取第 1 页(记录 1-10),请将偏移量设置为 0,将限制设置为 10;

SELECT column FROM table 
LIMIT 10 OFFSET 0;

要获取第 2 页(记录 11-20),请将偏移量设置为 10,其中限制为 10

SELECT column FROM table 
LIMIT 10 OFFSET 10;
于 2016-10-20T06:17:31.703 回答
9

MySQL 需要该 LIMIT 语法的数字常量。

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

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

  • 在准备好的语句中,可以使用 LIMIT 指定参数?占位符标记。

  • 在存储的程序中,可以使用整数值的例程参数或局部变量来指定 LIMIT 参数。

在 Java 端计算常量。

于 2012-07-30T20:03:23.080 回答