Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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
Php 建议我匹配人的算法_Php_Mysql_Cakephp - Fatal编程技术网

Php 建议我匹配人的算法

Php 建议我匹配人的算法,php,mysql,cakephp,Php,Mysql,Cakephp,目前我正在进行一个项目,我需要根据人们喜欢的食物种类来匹配他们: 这是一个场景: 我的数据库中有一个用户列表和他们最喜欢的食物。数据库结构如下: USERS(id,name,email,gender,dob) Fav_Food (id,user_name,food,desc) 用户数据表: 1、爱丽丝,alice@lala.com,女,2010年10月11日 2,鲍勃,bob@lala.com,男,2010年10月12日 3,杰森,jason@lala.com,男,2010年10月13日 fa

目前我正在进行一个项目,我需要根据人们喜欢的食物种类来匹配他们:

这是一个场景:

我的数据库中有一个用户列表和他们最喜欢的食物。数据库结构如下:

USERS(id,name,email,gender,dob)
Fav_Food (id,user_name,food,desc)
用户数据表:

1、爱丽丝,alice@lala.com,女,2010年10月11日

2,鲍勃,bob@lala.com,男,2010年10月12日

3,杰森,jason@lala.com,男,2010年10月13日

fav_食品表数据:

爱丽丝,苹果,一些描述

爱丽丝,香蕉,一些描述

爱丽丝,梨,一些描述

鲍勃,苹果,一些描述

5,鲍勃,奶油蛋糕,一些蛋糕

6,杰森,香蕉,一些描述

6,杰森,苹果,一些描述

想象一下,我是爱丽丝,我喜欢苹果、香蕉和梨。我怎样才能根据最喜欢的食物来匹配人们?例如,我首先检查是否有人喜欢苹果、香蕉和梨,包括所有三种,然后只选择两种组合苹果、香蕉苹果、香蕉梨、苹果……等等


把它想象成一个维恩图,其中的交互是我感兴趣的。我有兴趣推荐最匹配的用户。有什么算法可以用于php吗?

您可以研究一下,但我怀疑这是否是最有效的算法。

您可以研究一下,但我怀疑这是否是最有效的算法。

您可以做的是将fav_foods表连接到自身,然后计算匹配项:

SELECT u2.user_name,count(*) as likeness 
FROM `fav_food` as u1 INNER JOIN `fav_food` as u2 ON (u1.user_name = 'alice' AND 
                                                 u1.food = u2.food AND 
                                                 u2.user_name != "alice")
GROUP BY u2.user_name 
ORDER BY likeness DESC
它将输出:

user_name   likeness
jason       2
bob         1
诀窍在于内部联接的条件…=

希望这有帮助


编辑:oops我更正了查询=

您可以做的是将fav_foods表连接到它自己,然后计算匹配项:

SELECT u2.user_name,count(*) as likeness 
FROM `fav_food` as u1 INNER JOIN `fav_food` as u2 ON (u1.user_name = 'alice' AND 
                                                 u1.food = u2.food AND 
                                                 u2.user_name != "alice")
GROUP BY u2.user_name 
ORDER BY likeness DESC
它将输出:

user_name   likeness
jason       2
bob         1
诀窍在于内部联接的条件…=

希望这有帮助


编辑:哎呀,我更正了这个查询=

我个人会创建一个用户HABTM food relation,而不是反复存储相同的字符串

第二,

如果您决定使用HABTM关系,请查看此文档:该页面上的最后一个示例可能是您最感兴趣的

您可以使用on-the-fly绑定获取所有用户的最爱食物,例如苹果和香蕉

或者,你可以得到所有的用户和他们的食物,并使用Jaccard系数进行比较


只是加入一些可能性,希望能有所帮助

就我个人而言,我会建立一个食物关系,而不是一遍又一遍地存储相同的字符串

第二,

如果您决定使用HABTM关系,请查看此文档:该页面上的最后一个示例可能是您最感兴趣的

您可以使用on-the-fly绑定获取所有用户的最爱食物,例如苹果和香蕉

或者,你可以得到所有的用户和他们的食物,并使用Jaccard系数进行比较


只是加入一些可能性,希望能有所帮助

看看Jaccard系数,你可以用它来衡量两个给定事物的相似性。我正在阅读它,但不知道它如何与数据列表一起工作……嗯,看看Jaccard系数,你可以用它来衡量两个给定事物的相似性。我正在阅读它,但不知道它如何与一系列数据一起工作……嗯