mysql:按最近的id排序

时间:2012-03-24 06:41:29

标签: mysql

我有一个查询返回一些与特定用户(Bob)相关的用户。

我需要检索最近的记录,这意味着,我必须返回ID列接近Bob的ID的用户。

例如:

         ID

Tom      5
Mike     8
Bob      10
Jack     12
Brian    13

查询:

SELECT users.* FROM users
INNER JOIN neighboors on neighboors.neighboor_id = users.id #ignore this join, just to exemplify
WHERE neighboors.user_id = 10 # bobs id
ORDER BY something
LIMIT 3 # i want to return only the 3 nearest users (according to the table above:mike, jack and brian)

我怎样才能实现这个目标?

更新

逻辑是,用户可以植树,每棵树都有一个物种。该查询应返回已种植相同树种的用户。

为什么接近id会有重要的顺序?客户想要这样:)没有其他原因。

3 个答案:

答案 0 :(得分:3)

试试这个,应该做你需要的:

SELECT users.* FROM users
INNER JOIN neighboors ON neighboors.neighboor_id = users.id
WHERE neighboors.user_id = 10 
ORDER BY ABS(neighboors.user_id - 10)
LIMIT 3

在这种情况下,ABS功能用于从user_id所选值(由{1}}选择的值计算 “距离” 在哪里......)。

要在大型表上获得更好的性能,您必须索引(如果尚未)列:neighboors.user_id

答案 1 :(得分:1)

执行此操作的一种方法是将差异存储为内部查询中的单独列,然后查询最小差异。嵌套查询的一个很好的例子是:     http://dev.mysql.com/tech-resources/articles/subqueries_part_1.html

答案 2 :(得分:0)

问题在于近处在正面和负面方向都有效。

如果你有:

Tom      5
Mike     8
Sally    9
Bob      10
Sarah    11
Jack     12
Brian    13

那么你想回到Mike,Sally和Sarah,还是Sally,Sarah和Jack?你喜欢上升接近还是靠近接近?

这将有助于准确了解此尝试实施的业务逻辑。为什么选择ID附近是很重要的? ID如何将用户相互关联?

如果您能提供更多详细信息,我有兴趣帮助您。