MySQL版本是5.7.2x。
我的确在一个表中列出了大约1000条记录。它们通过字段start_date
进行排序。
我想加载100条这些记录以在UI中显示为列表。但是不是前100个左右,而是已知ID之前的50条记录和已知ID之后的50条记录(例如id
= 511的记录)。
当然,在一个请求中完成此操作将是完美的,我也将寻求具有2个请求的解决方案。例如。一个请求找出行号id 511的请求将在所有记录中进行选择,然后在第二个请求中真正选择了正确设置LIMIT X, Y
的记录。
我正在努力寻找具有id的项目的位置,以便我可以明智地设置LIMIT
。
最好的问候 菲利普
答案 0 :(得分:0)
假设使用MySQL 8.0,应该可以使用CTE和ROW_NUMBER()
解决此问题:
WITH cte AS (
SELECT
t.*,
ROW_NUMBER() OVER(ORDER BY start_date) rn_asc
FROM mytable t
)
SELECT c2.*
FROM cte c1
INNER JOIN cte c2 ON c2.rn >= c1.rn - 50 AND c2.rn < c1.rn + 50
WHERE c1.id = 511
CTE为每个记录分配一个行号,按start_date
的顺序排列。然后,主查询选择ID为511
的记录,并与CTE自联接以提取具有+/- 50行号的记录。