2012-04-11 65 views
7

我需要使用mySQL获取ID附近的ID。使用mysql选择id前后的行

实施例:表中

标识:

2, 4, 5, 9, 11, 15, 19, 22, 25 

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

4, 5, 9, 11, 15 

谢谢!

回答

15

一个可能的解决方案是

  • 计算每个地方你减去你的ID号的绝对值。
  • 对结果进行排序并将结果集限制为5条记录。

SQL语句

SELECT ABS(ID - 9), * 
FROM MyTable 
ORDER BY 
     ABS(ID - 9) 
LIMIT 5 

编辑(感谢ypercube的指出了这种解决方案可能的缺陷)

如果目的是让从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 
+1

simpool和bootifol +1 – 2012-04-11 07:29:45

+0

@NiftyDude - Foonny :) – 2012-04-11 07:32:58

+1

当然你的意思是'ORDER BY ABS(id - @id)'其中'@ id'是特定的id(例子中的'9') – 2012-04-11 07:38:41