Mysql SQL按匹配到特定行的顺序

Mysql SQL按匹配到特定行的顺序,mysql,count,match,Mysql,Count,Match,下面有一个示例表。我正在尝试创建一个SQL查询,该查询获取除当前用户的user\u id之外的所有user\u id,然后按与具有当前user\u id的行的匹配数排序 例如,如果用户的user_id为“1”,我希望获得与id为2-8的行对应的所有user_id,然后将user_id从与当前用户的行最匹配的顺序排列为与当前用户的行最不匹配的顺序 假设var current_user=1 大概是这样的: SELECT user_id FROM assets WHERE user_id <&g

下面有一个示例表。我正在尝试创建一个SQL查询,该查询获取除当前用户的user\u id之外的所有user\u id,然后按与具有当前user\u id的行的匹配数排序

例如,如果用户的user_id为“1”,我希望获得与id为2-8的行对应的所有user_id,然后将user_id从与当前用户的行最匹配的顺序排列为与当前用户的行最不匹配的顺序

假设var current_user=1

大概是这样的:

SELECT user_id
FROM assets
WHERE user_id <> `current_user` and
ORDER BY most matches to `current_user`"

我想你可以这样做:

select a.*
from assets a cross join
     assets a1
where a1.user_id = 1 and a.user_id <> a1.user_id
order by ( (a.cars = a1.cars) + (a.houses = a1.houses) + (a.boats = a1.boats) ) desc;
这称为曼哈顿距离,您将实现最近邻模型的一个版本

select a.*
from assets a cross join
     assets a1
where a1.user_id = 1 and a.user_id <> a1.user_id
order by ( (a.cars = a1.cars) + (a.houses = a1.houses) + (a.boats = a1.boats) ) desc;
order by ( abs(a.cars - a1.cars) + abs(a.houses - a1.houses) + abs(a.boats - a1.boats) );