mysql:按最近的id排序

标签 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 的邻近程度排序很重要?客户想要这样:)没有其他原因。

最佳答案

尝试一下,应该可以满足您的需要:

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/

相关文章:

mysql - sql 查询问题(嵌套 AND OR)

PHP Mysql,如果用户提交空则指定默认值

java - 我如何使用 java 在 mysql 数据库中根据日期差异(来自另一个表的日期和当前日期)将表中的特定标志更新为 'Y'

mysql - 与许多实体相关的事件的数据库模式

php - phpmyadmin 没有权限;尝试root,无密码

mysql - 显示按月份名称排序的两个日期字段中的数据

javascript - 世界杯预测系统排名

mysql - 连接多个表会导致使用重复的属性扩展单行

mysql - 需要根据日期提取最后 x 行数

mysql - 尝试在 HQL 中将 SUM 与 HAVING 一起使用时出现 "expecting CLOSE, found ' =' "异常