比较用户PHP之间的相似性

时间:2014-01-10 20:03:58

标签: php mysql sql percentage similarity

我正在建立一个拥有用户系统的网站 并希望通过他们的个人资料匹配用户,其中包含20个字段

我希望用户在超过50%时可以与其他用户匹配,这是20个相同的10个字段

我已经知道了:

    $query = "SELECT * FROM users WHERE username='test'";
    $result = mysqli_query($db_conx, $query);
    $array = mysqli_fetch_row($result);

    $query2 = "SELECT * FROM users WHERE username='test2'";
    $result2 = mysqli_query($db_conx, $query2);
    $array2 = mysqli_fetch_row($result2);

    $similar = array_intersect($array, $array2);
    $p2_perc = count($similar) / count($array2);

    echo round($p2_perc * 100) . "% equal";

我希望用户会自动显示该特定用户,但我可以修复

任何人?

提前谢谢 非常感谢!

真正的问题是这样的

$query2 = "SELECT * FROM users LIMIT 1";
if ($query2 similarity > 50%)
echo "$user2";

1 个答案:

答案 0 :(得分:1)

您可以将此组合成一个查询,如下所示:

SELECT
    user1.username,
    user2.username,
    (
        (user1.row1=user2.row1) + 
        (user1.row2=user2.row2) +
        ...
    )/20 AS score
FROM
    users AS user1,
    users AS user2
WHERE
    user1.username <> user2.username
HAVING
    score > 0.5

这将返回两个用户名及其得分,只是得分大于0.5,

说明:比较两列(每个user1.rowX=user2.rowX)。如果它们相同,则为1,否则为0。 0和1的总和除以问题的数量(20),这是得分(它是平均值的简单计算)。

但如果检查了很多用户,这可能会变得非常慢。如果您只想为给定用户显示匹配项(例如,当前登录的用户),请使用:

SELECT
    user1.username,
    user2.username,
    (
        (user1.row1=user2.row1) + 
        (user1.row2=user2.row2) +
        ...
    )/20 AS score
FROM
    users AS user1,
    users AS user2
WHERE
    user1.username <> user2.username AND
    user1.username = 'CURRENTLY_LOGGED_IN_USER'
HAVING
    score > 0.5
相关问题