Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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/sql问卷调查;适用性匹配_Php_Mysql_Matching - Fatal编程技术网

PHP/sql问卷调查;适用性匹配

PHP/sql问卷调查;适用性匹配,php,mysql,matching,Php,Mysql,Matching,我正在开发一个解决方案,通过使用PHP和mySQL完成的问卷调查,将人们与他们可能感兴趣的某些事情进行匹配。基本上,用户回答问题,创建用户的配置文件,然后将其与数据库中可能适合其个性的某些内容进行比较。这不是一个交友网站,但我想它的工作原理与交友网站的工作原理类似,人们在网站上做问卷调查,它可以根据这些调查结果对他们进行匹配,匹配值为% 我已经开始开发这个,但我认为我使用的方法可能不是最有效的。我希望你能把你的比赛按你最好的比赛进行分类 有什么建议是最好的方法吗 谢谢, 德克兰把答案串成一个字符

我正在开发一个解决方案,通过使用PHP和mySQL完成的问卷调查,将人们与他们可能感兴趣的某些事情进行匹配。基本上,用户回答问题,创建用户的配置文件,然后将其与数据库中可能适合其个性的某些内容进行比较。这不是一个交友网站,但我想它的工作原理与交友网站的工作原理类似,人们在网站上做问卷调查,它可以根据这些调查结果对他们进行匹配,匹配值为%

我已经开始开发这个,但我认为我使用的方法可能不是最有效的。我希望你能把你的比赛按你最好的比赛进行分类

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

谢谢,
德克兰把答案串成一个字符串。如果它们是yes/no,则看起来有点像二进制,但是如果大于16和,则使用其他数字、十六进制或对也没有坏处
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
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
#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
    ');
}