Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将一行中的每一列与数据库sql中的每一行进行比较_Mysql_Sql_Node.js_Inner Join_Telegram Bot - Fatal编程技术网

Mysql 将一行中的每一列与数据库sql中的每一行进行比较

Mysql 将一行中的每一列与数据库sql中的每一行进行比较,mysql,sql,node.js,inner-join,telegram-bot,Mysql,Sql,Node.js,Inner Join,Telegram Bot,我正在构建一个机器人,它根据用户得到的分数匹配用户,这个分数是根据用户的请求对数据库中的数据进行计算得出的。 我在那个数据库中只有一个表和几个列(用户、年龄、类型、语言、格式等) 我想做的是,一旦用户单击chatbot上的“查找匹配”按钮,该用户的数据(已经在数据库中)将与同一表中其他用户的数据进行比较,并对每一行的每一列进行1对1的比较 例如,用户的体裁偏好将与表格每行中其他用户的每个体裁偏好进行比较,当存在匹配时,添加1分,然后将每个用户的语言进行比较,当存在匹配时,给出1分。这将转到每行的

我正在构建一个机器人,它根据用户得到的分数匹配用户,这个分数是根据用户的请求对数据库中的数据进行计算得出的。 我在那个数据库中只有一个表和几个列(用户、年龄、类型、语言、格式等)

我想做的是,一旦用户单击chatbot上的“查找匹配”按钮,该用户的数据(已经在数据库中)将与同一表中其他用户的数据进行比较,并对每一行的每一列进行1对1的比较

例如,用户的体裁偏好将与表格每行中其他用户的每个体裁偏好进行比较,当存在匹配时,添加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
选择t.*,
(t1.genre=t.genre)+(t1.language=t.language)+(t1.format=t.format)作为分数
来自MyT表
t1.user t.user上的内部联接mytable t1
其中t1.user=?
按分数顺序描述

问号表示当前登录用户的id,您希望为其搜索匹配用户。该查询将带来所有其他用户,并统计他们在表列上共有多少个值:每个匹配的值将增加分数
1
。结果按分数递减排序。

谢谢!那么,为了澄清一下,在一场比赛中,分数将如何增加1?我对每个类别也有一个权重,例如,流派在1的总权重中有0.4的权重。如何将其添加到要考虑的查询中?@xTMx:通常,
(t1.genre=t.genre)
返回
1
,如果值匹配,则返回
0
。因此,每场比赛都会增加1分。您可以使用
0.4*(t1.genre=t.genre)+……