【问题标题】:MySQL Limit Rows BugMySQL 限制行数错误
【发布时间】:2011-04-27 04:05:56
【问题描述】:
SELECT * FROM `news` 
WHERE `deleted` = '0' 
ORDER BY `time` DESC 
LIMIT $START, $END

LIMIT = 0,10 加载良好。
LIMIT10,20 时,它加载良好。
LIMIT20,30 时,它会再次加载已经在20,30 中显示的最后4 行...

【问题讨论】:

  • 表中有多少行?

标签: php mysql limit offset


【解决方案1】:

您使用LIMIT 的方式不正确。不是,

LIMIT <start> <end>

而是,

LIMIT <offset> <number_of_rows>

来自MySQL documentation

第一个参数指定 要返回的第一行的偏移量,以及 第二个指定最大值 要返回的行数。

例如,

... LIMIT 0, 10 -- first 10 rows
... LIMIT 10, 10 -- rows 10-20
... LIMIT 10, 20 -- rows 10-30, not 10-20
... LIMIT 20, 30 -- rows 20-50, not 20-30

如果结果集中没有足够的行来填充限制,它将只返回到最后一行。例如,如果您只检索 15 行,...LIMIT 10, 10 将返回第 10-15 行。

【讨论】:

  • 别怪自己,我也只是花了 30 分钟在鬼混。如果您不详细阅读说明,就会发生这种情况。 :)
【解决方案2】:

引用自http://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html

SELECT ... FROM single_table ... ORDER BY non_index_column [DESC] 限制 [M,]N;

从队列中返回前 N 行。 (如果指定了 M,则跳过 前 M 行并返回接下来的 N 行。)

  • LIMIT 0, 10 -- 前 10 行,第 1-10 行
  • LIMIT 10, 10 -- 11-20 行
  • LIMIT 10, 20 -- 第 11-30 行,而不是 11-20
  • LIMIT 20, 30 -- 第 21-50 行,而不是 21-30 行

【讨论】:

    【解决方案3】:

    首先使用从数据库中获取完整数据 SELECT SQL_CALC_FOUND_ROWS FROM [表名]; 它返回总数;

    使用三个变量;

    $开始 $结束; $total_records;

    使用 ceil($total_records/$start); 你会得到roundValue; 使用限制

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多