如何将登录的用户与数据库系统中的所有现有用户进行比较


How to compare the user who is logged in with all existing users in a database system?

现在我正在构建一个类似社交媒体的系统。它具有根据登录用户与数据库系统中所有现有用户的相似度计算结果给出推荐用户的功能。最高相似性将显示出来,并推荐登录的用户成为系统中的好友。不,现在我使用3个用户来测试我的程序和我的pearson相关公式。一切都很顺利。但如果系统中只有3个用户,我可以使用以下代码来显示计算结果:

$u2=$u[1];
$u3=$u[2];
$sim1_2=similarity($u1,$u2);
$sim1_3=similarity($u1,$u3);
echo "<br>sim 1-2 ".$sim1_2;
echo "<br>sim 1-3 ".$sim1_3;
?>

其中$u1是指登录的用户。但如果我想显示登录的用户与数据库中所有现有用户的比较结果,如何?因为我们无法预测以后会有多少用户在我的系统中注册。那么,如何比较登录用户和数据库中所有现有用户的最佳方式呢?提前感谢你的帮助。

您只需获得所有用户(或一批用户)的数组或集合,然后使用forforeach循环对其进行迭代,执行您编写的similarity()函数。如果相似性函数返回正相关结果,则将其添加到该用户的另一个相似性数组中。

这里有一个例子:

// Get users in any way you want. Let's assume that $users is an array
$users = getUsers();
//iterate over all users
foreach ($users as $user)
{   
    // Check if current user is similar to a user
    if (similarity($yourUser, $user))
    {
        // If the similarity function does not return false
        // then add that similarity result to an array.
        // We will assume that the similarity function returns
        // an associative array with keys such as 'username', 'id' etc
        $similarities[] = similarity($yourUser, $user);
    }
}
// Now we have a multi-dimensional array of similarity data that you can use in any way you want
// For example, lets display all usernames of the similar users
foreach ($similarities as $similarity)
{
    echo $similarity['username'];
}

这只是你如何做到这一点的一个例子。当然,您可以将代码封装到用户类的函数或方法中,这取决于您如何编写和构造代码。

显然,如果您的系统有很多用户,则此操作可能需要很长时间,因此请记住这一点,并注意何时以及如何运行此代码。