如有必要,MySQL 选择从第 x 行循环到表开头的 n 行

  • 本文关键字:循环 开头 MySQL 选择 mysql
  • 更新时间 :
  • 英文 :


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

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

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

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

像这样:

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

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

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

编辑:添加了最终ORDER BY子句(如果您始终希望对结果进行排序,则可选)。

最新更新