我有一个查询,该查询返回与特定用户 (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 的邻近程度排序很重要?客户想要这样:)没有其他原因。
最佳答案
尝试一下,应该可以满足您的需要:
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
所选值(通过 WHERE ... 过滤的值)计算“距离”。
为了在大型表上获得更好的性能,您必须对列进行索引(如果还没有):neighboors.user_id
。
关于mysql:按最近的id排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9849706/