将一行中的每一列与数据库中的每一行进行比较 sql
Comparing each colum in a row to every row in the database sql
我正在构建一个根据用户获得的分数匹配用户的机器人,该分数是根据用户的请求对数据库中的数据进行的计算得出的。
我在该数据库中只有 1 table 和一些列(用户、年龄、流派、语言、格式等)。
我想要做的是,一旦用户点击聊天机器人上的“查找匹配”按钮,该用户的数据已经在数据库中,将与数据库中的其他用户的数据进行比较 table 并逐行比较每一列。
例如,用户的流派偏好将与table每一行中其他用户的每个流派偏好进行比较,当有匹配时,添加1分,然后将比较语言每个用户和 1 分,当有匹配时。这将转到每一行的每一列,并与用户的进行比较。最终将匹配分最高的用户推荐给该用户
最好的方法是什么?
我正在使用 nodejs 和 mysql 数据库。
谢谢。
我将其视为自连接和条件表达式:
select t.*,
(t1.genre = t.genre) + (t1.language = t.language) + (t1.format = t.format) as score
from mytable t
inner join mytable t1 on t1.user <> t.user
where t1.user = ?
order by score desc
问号代表当前登录用户的id,您要搜索匹配的用户。该查询会带来所有其他用户,并计算他们在 table 列中有多少个共同值:每个匹配值都会使分数增加 1
。结果按分数降序排列。
我正在构建一个根据用户获得的分数匹配用户的机器人,该分数是根据用户的请求对数据库中的数据进行的计算得出的。 我在该数据库中只有 1 table 和一些列(用户、年龄、流派、语言、格式等)。
我想要做的是,一旦用户点击聊天机器人上的“查找匹配”按钮,该用户的数据已经在数据库中,将与数据库中的其他用户的数据进行比较 table 并逐行比较每一列。
例如,用户的流派偏好将与table每一行中其他用户的每个流派偏好进行比较,当有匹配时,添加1分,然后将比较语言每个用户和 1 分,当有匹配时。这将转到每一行的每一列,并与用户的进行比较。最终将匹配分最高的用户推荐给该用户
最好的方法是什么? 我正在使用 nodejs 和 mysql 数据库。
谢谢。
我将其视为自连接和条件表达式:
select t.*,
(t1.genre = t.genre) + (t1.language = t.language) + (t1.format = t.format) as score
from mytable t
inner join mytable t1 on t1.user <> t.user
where t1.user = ?
order by score desc
问号代表当前登录用户的id,您要搜索匹配的用户。该查询会带来所有其他用户,并计算他们在 table 列中有多少个共同值:每个匹配值都会使分数增加 1
。结果按分数降序排列。