使用mysql在id周围的行之前和之后选择

Hug*_*lio 8 mysql sql

我需要使用mySQL获取ID周围的ID.

例:

表中的ID:

2, 4, 5, 9, 11, 15, 19, 22, 25
Run Code Online (Sandbox Code Playgroud)

例如,我需要知道ID 9周围的5个ID.查询应该返回:

4, 5, 9, 11, 15
Run Code Online (Sandbox Code Playgroud)

谢谢!

Lie*_*ers 17

一个可能的解决方案是

  • 计算您减去ID的每个id的绝对值.
  • 排序结果并将结果集限制为5条记录.

SQL语句

SELECT ABS(ID - 9), *
FROM   MyTable
ORDER BY
       ABS(ID - 9)
LIMIT  5
Run Code Online (Sandbox Code Playgroud)

编辑 (thx到ypercube指出此解决方案中可能存在的缺陷)

如果意图是从左边获得2个id并从右边获得两个id,则可以如下调整该语句

SELECT * FROM MyTable WHERE ID <= 9 ORDER BY ID DESC LIMIT 3 
UNION ALL
SELECT * FROM MyTable WHERE ID > 9  ORDER BY ID ASC  LIMIT 2
Run Code Online (Sandbox Code Playgroud)