【问题标题】:Use LIMIT to paginate results in MySQL query在 MySQL 查询中使用 LIMIT 对结果进行分页
【发布时间】:2012-07-28 13:06:38
【问题描述】:

我想一次获取一个“页面”的结果;我希望页码是一个参数(在 JDBC 准备语句中)。考虑以下 sn-p

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) * 20), 20' 在第 1 行

我的LIMIT 子句有什么问题,我该如何解决?

【问题讨论】:

    标签: mysql pagination limit


    【解决方案1】:

    这是做不到的。

    在此处查看解决方案: 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);
    

    【讨论】:

    • 最好你会使用这样的东西。该代码比您必须对表进行计数然后使用该计数结果作为新参数的两个查询要快得多,因为表中可能存在 n 行......表越大越少有效的查询将是。
    【解决方案2】:

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

    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;
    

    【讨论】:

      【解决方案3】:

      对于该 LIMIT 语法,MySQL 需要数字常量。

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

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

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

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

      在 Java 端计算常量。

      【讨论】:

      • 所以它不能将((1-1)*20) 评估为常量,即使它只包含常量?这似乎是一个奇怪的限制。我认为它被认为是一个常数,因为它不包含任何变量......但至少我现在知道该怎么做!谢谢。
      • 是的,从数学上讲,你代表的是一个“常数”((1-1)*20 总是相同的).. 但从解析器的角度来看,MySQL 并不是在数学上-表达式解析心情:)
      • 我刚刚用limit ?, 20 替换了有问题的代码并使用了pageStart = (page - 1) * 20;,它就像一个魅力。现在到下一个错误:)
      猜你喜欢
      • 2012-12-21
      • 2013-12-20
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 2019-12-23
      • 2020-09-17
      相关资源
      最近更新 更多