我有一个查询返回一些与特定用户(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会有重要的顺序?客户想要这样:)没有其他原因。
答案 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如何将用户相互关联?
如果您能提供更多详细信息,我有兴趣帮助您。