mysql - mysql 如果需要,从第 x 行开始选择 n 行循环到表的开头
问题描述
从给定行号开始选择给定行数的最佳方法是什么,如果需要,循环到表的开头?
$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
第一个子查询尝试获取$limit
从 开始的行$offset
。第二个子查询获取第一个 $limit
匹配的行(即从偏移量 0 开始),所以如果第一个子查询返回的行数少于$limit
行数,第二个子查询将“填充”剩余的$limit
行,保证结果集中的总行数(假设有至少有这么多开始)。
编辑:添加了 finalORDER BY
子句(如果您总是希望对结果进行排序,则可选)。
推荐阅读
- mongodb - 如何在 Rust 中实现 MongoDB 模式和业务逻辑?
- python - 4行中只有最后一行动画
- google-identity - Google Identity Platform Rest api - 退出或清除会话
- c - GLSL 片段着色器能否在没有帧缓冲区和类似不便的情况下运行?
- debugging - Ubuntu 20.04 中 Lenovo Ideapad 3 中的网络摄像头分辨率可怕
- python - 将字符串转换为 pandas.core.series.Series 的浮点数
- java - java 映射的无效 json 字符串(键上没有引号)
- go - 了解官方博客中的 Go 竞态条件示例
- python - NameError: name '*field*__range' 未定义
- macos - jnilib存在于MAC目录中,我在LD_LIBRARY_PATH和DY_LD_LIBRARY_PATH中指定并导出此路径并导出,但仍然发现错误