比较PHP用户之间的相似性
我正在制作一个带有用户系统的网站 并希望通过他们的配置文件匹配用户,这些配置文件有20个字段 我希望用户可以得到一个匹配与其他用户,当他们超过50%,这是10个字段的20相同 我已经知道了:比较PHP用户之间的相似性,php,mysql,sql,percentage,similarity,Php,Mysql,Sql,Percentage,Similarity,我正在制作一个带有用户系统的网站 并希望通过他们的配置文件匹配用户,这些配置文件有20个字段 我希望用户可以得到一个匹配与其他用户,当他们超过50%,这是10个字段的20相同 我已经知道了: $query = "SELECT * FROM users WHERE username='test'"; $result = mysqli_query($db_conx, $query); $array = mysqli_fetch_row($result); $quer
$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";
您可以将其组合到一个查询中,如下所示:
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
问题在哪里?什么有效/无效?这似乎是可行的……但很难看出失败的地方上面的代码显示了两个用户的相似性百分比,但我想使用query2$query2=“SELECT*FROM users”;因此,它只会选择与您的用户表的列相似程度超过50%的用户。我想这取决于您的用户表的列。您能澄清一下吗?您是否正在搜索任何与您事先知道其身份的特定用户“相似”的用户?或者你打算扫描所有用户对,寻找最匹配的用户>你好,我想这会有用的,你能帮我做点什么吗?我想将用户测试和derping与行equal1、equal2、equal3和equal4进行比较。我很困,所以你能帮我吗?如果我想将当前登录的用户与所有用户(*)进行比较,并获得50%或更多匹配的用户,该怎么办?我的第一次查询会将每个用户与其他用户进行对比。第二个检查当前登录的用户与所有其他用户,并返回得分大于0.5(50%)的用户。第二个问题回答了你的第二个问题。如果您只想检查两个用户,请将它们添加到WHERE子句中?或者这是错误的?不工作in$query=“选择test.username,baro.username,((test.option1=baro.option1)+(test.gender=baro.gender)+(test.state=baro.state))/3作为测试用户的分数,用户作为baro,其中test.username baro.username和test.username=“$log_username”的分数大于0.5”$结果=mysqli\u查询($db\u conx,$query)$数组=mysqli\u fetch\u行($result);回波阵列;是否有错误消息?还是什么都没有?是否确实有一些应该显示的结果,或者当前用户没有一些匹配项?删除“HAVING…”以显示所有其他用户,而不考虑分数。它不显示任何内容:s
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