gpt4 book ai didi

PHP/sql 问卷调查和适合性匹配

转载 作者:行者123 更新时间:2023-11-29 14:01:44 24 4
gpt4 key购买 nike

我正在开发一种解决方案,用于使用 PHP 和 mySQL 完成的调查问卷将人们与他们可能感兴趣的某些事物进行匹配。基本上,用户回答问题,它创建用户的个人资料,然后将其与数据库中可能适合他们个性的某些内容进行比较。它不是一个约会网站,但我想它的工作方式类似于约会网站的工作方式,人们进行问卷调查,并且它可以根据这些信息与百分比匹配值进行匹配。

我已经开始开发这个,但我认为我使用的方法可能不是最有效的。我希望您能按照最佳匹配对匹配进行排序。

有什么建议最好的方法是什么吗?

谢谢,德克兰

最佳答案

将答案连接成字符串。如果是/否,它看起来有点像二进制,但是如果您有 >16 和 <100 个选项,或者使用分隔符等,那么使用其他数字、十六进制或对也没有什么坏处。

要找到最接近的匹配,请比较每个位置的每个字符并对结果进行排名。

排名 = 给定比较字符串中相同的字符数,例如“0101101001”

0101101001 against 0101101001 gives a rank of 10 
0101101001 against 1101101001 gives a rank of 9
0101101001 against 1111111001 gives a rank of 7
0101101001 against 0001100111 gives a rank of 6

作为 SQL

table `yesno`
| user_id | answers |
| 1 | 0101101001 |
| 2 | 1101101001 |
etc

SELECT answers,
( #looking for 0101101001
IF (substring(answers,1,1)=0, 1, 0)
+ IF (substring(answers,2,1)=1, 1, 0)
+ IF (substring(answers,3,1)=0, 1, 0)
+ IF (substring(answers,4,1)=1, 1, 0)
+ IF (substring(answers,5,1)=1, 1, 0)
+ IF (substring(answers,6,1)=0, 1, 0)
+ IF (substring(answers,7,1)=1, 1, 0)
+ IF (substring(answers,8,1)=0, 1, 0)
+ IF (substring(answers,9,1)=0, 1, 0)
+ IF (substring(answers,10,1)=1, 1, 0)
)
AS rank
FROM yesno
ORDER BY
( #looking for 0101101001
IF (substring(answers,1,1)=0, 1, 0)
+ IF (substring(answers,2,1)=1, 1, 0)
+ IF (substring(answers,3,1)=0, 1, 0)
+ IF (substring(answers,4,1)=1, 1, 0)
+ IF (substring(answers,5,1)=1, 1, 0)
+ IF (substring(answers,6,1)=0, 1, 0)
+ IF (substring(answers,7,1)=1, 1, 0)
+ IF (substring(answers,8,1)=0, 1, 0)
+ IF (substring(answers,9,1)=0, 1, 0)
+ IF (substring(answers,10,1)=1, 1, 0)
)
DESC

作为 PHP

#usage $rs=getUsersByRank("0101101001");

function getUsersByRank($lookslike) {
/* expects "binary" string
returns user_id, answers and rank (0 to string length) ordered by closest match first
*/

$ifs=array();
foreach (str_split($lookslike) as $i=>$bit){
$ifs[]='IF (substring(answers,' . ($i+1) . ',1)=' . $bit . ', 1, 0) ';
}

// use your db class
return $db->select_many('
SELECT user_id, answers,
( '. implode(' + ', $ifs) .' )
AS rank
FROM yesno
ORDER BY
( '. implode(' + ', $ifs) .' )
DESC
');
}

如果您想保留每个用户与其他用户的比较,您将需要另一个表来存储 user1、user2、match_rank。

您可能想限制 getUsersByRank() 中的结果。

我还没有实际测试过它是否有效,只是将其写出来。

关于PHP/sql 问卷调查和适合性匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14962634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com