首页 > 解决方案 > mysql 如果需要,从第 x 行开始选择 n 行循环到表的开头

问题描述

从给定行号开始选择给定行数的最佳方法是什么,如果需要,循环到表的开头

$starting_offset如果和的总和$limit大于表中的行数,则以下内容不起作用:

SELECT * 
FROM table
ORDER BY sort_order ASC
LIMIT $starting_offset, $limit

我需要始终选择$limit行数,除非$limit表中的行数少于行数。

标签: mysql

解决方案


就像是:

SELECT * FROM
(
  (
  SELECT * 
  FROM table
  ORDER BY sort_order ASC
  LIMIT $starting_offset, $limit
  ) AS table1
  UNION ALL
  (
  SELECT * 
  FROM table
  ORDER BY sort_order ASC
  LIMIT $limit
  ) AS table2
)
ORDER BY sort_order ASC
LIMIT $limit

第一个子查询尝试获取$limit从 开始的行$offset。第二个子查询获取第一个 $limit匹配的行(即从偏移量 0 开始),所以如果第一个子查询返回的行数少于$limit行数,第二个子查询将“填充”剩余的$limit行,保证结果集中的总行数(假设有至少有这么多开始)。

另外:https ://dba.stackexchange.com/questions/167768/perform-mysql-limited-select-that-wraps-when-it-reaches-the-end-of-table

编辑:添加了 finalORDER BY子句(如果您总是希望对结果进行排序,则可选)。


推荐阅读