【发布时间】:2012-04-11 07:25:02
【问题描述】:
我需要使用 mySQL 获取 ID 周围的 ID。
例子:
表中的ID:
2, 4, 5, 9, 11, 15, 19, 22, 25
例如,我需要知道 ID 9 周围的 5 个 ID。 查询应返回:
4, 5, 9, 11, 15
谢谢!
【问题讨论】:
我需要使用 mySQL 获取 ID 周围的 ID。
例子:
表中的ID:
2, 4, 5, 9, 11, 15, 19, 22, 25
例如,我需要知道 ID 9 周围的 5 个 ID。 查询应返回:
4, 5, 9, 11, 15
谢谢!
【问题讨论】:
一个可能的解决方案是
SQL 语句
SELECT ABS(ID - 9), *
FROM MyTable
ORDER BY
ABS(ID - 9)
LIMIT 5
编辑 (感谢 ypercube 指出此解决方案中可能存在的缺陷)
如果意图是从左侧获取2个id,从右侧获取2个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
【讨论】:
ORDER BY ABS(id - @id),其中@id是具体的id(例子中是9)
@ 是 SQL Server 语法。如果我错了,请纠正我。
4,5,6,7,8,9,23,47,此查询将显示5,6,7,8,9,这很好(因为 OP 的意图尚不清楚)。另一种情况是从左侧显示两个 ID,从右侧显示两个 ID:7,8,9,23,47
* 符号处,第二个在UNION 关键字处。