MySQL:找到一条记录的行号,使用LIMIT选择-50+50条记录
MySQL版本是5.7.2x 我确实在一个表中列出了大约1000条记录。它们是按字段开始日期排序的。 我想加载100条这些记录以在UI中显示为列表。但不是前100条左右,而是已知id之前的50条记录和之后的50条记录,例如id=511的记录 当然,在一个请求中完成这项工作将是完美的,我也会选择一个包含两个请求的解决方案。例如,查找行号id 511的一个请求将包含在对所有记录的选择中,然后在限制X,Y设置正确的第二个请求中真正选择记录 我正在努力的是找出id为的物品的位置,这样我就可以明智地设置限制 致意MySQL:找到一条记录的行号,使用LIMIT选择-50+50条记录,mysql,sql,limit,Mysql,Sql,Limit,MySQL版本是5.7.2x 我确实在一个表中列出了大约1000条记录。它们是按字段开始日期排序的。 我想加载100条这些记录以在UI中显示为列表。但不是前100条左右,而是已知id之前的50条记录和之后的50条记录,例如id=511的记录 当然,在一个请求中完成这项工作将是完美的,我也会选择一个包含两个请求的解决方案。例如,查找行号id 511的一个请求将包含在对所有记录的选择中,然后在限制X,Y设置正确的第二个请求中真正选择记录 我正在努力的是找出id为的物品的位置,这样我就可以明智地设置限
Philipp假设MySQL 8.0,应该可以使用CTE和ROW_编号来解决此问题:
CTE为每条记录分配一个行号,按开始日期排序。然后,主查询选择id为511的记录,并与CTE自连接,以拉出具有+/-50行编号的记录。假设MySQL 8.0,则应该可以使用CTE和行编号来解决此问题: CTE为每条记录分配一个行号,按开始日期排序。然后,主查询选择id为511的记录,并与CTE自连接,以提取行数为+/-50的记录
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