Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:找到一条记录的行号,使用LIMIT选择-50+50条记录_Mysql_Sql_Limit - Fatal编程技术网

MySQL:找到一条记录的行号,使用LIMIT选择-50+50条记录

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为的物品的位置,这样我就可以明智地设置限

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