Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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 只找那些不是你朋友的人_Php_Mysql - Fatal编程技术网

Php 只找那些不是你朋友的人

Php 只找那些不是你朋友的人,php,mysql,Php,Mysql,我的代码现在看起来像这样 <?php $get_userinfo = mysql_query("SELECT * FROM users WHERE id != '$id'") or die(mysql_error()); for ($i = 1; $i <= 6; $i++) { $userinfo = mysql_fetch_assoc($get_userinfo); $usertags = $userinfo['t

我的代码现在看起来像这样

<?php 
    $get_userinfo = mysql_query("SELECT * FROM users WHERE id != '$id'") or die(mysql_error());
    for ($i = 1; $i <= 6; $i++) {
            $userinfo = mysql_fetch_assoc($get_userinfo);
            $usertags = $userinfo['tags'];
            $tagsdata = explode(" ", $usertags);
            $interestsdata = explode(" ", $interests);
            $result = array_intersect($interestsdata, $tagsdata);

            echo '<li><img src="images/users/'.$userinfo['avatar'].'" /><a href="'.$userinfo['username'].'">'.$userinfo['name'].'</a><div class="add whotofollow'.$i.'" title="Not following/friends"></div></li>';
            }
?>
因此,这将当前选择所有不是您自己的用户,然后将其与您对人员的兴趣进行匹配,以便只显示您真正想要更新的人员。然后它使所有这些人中只有6人可见,而且它不会像这样检查,大多数东西都在公共场所

有一些事情我自己都不知道如何从中编码

我首先需要确保只显示我没有添加为好友的人。好友存储在一个名为Friends的表中,其中包含userid和userid2行。如果我们是朋友,userid或userid2都可以是我的id

第二,我需要先订购我与其他地方最相似的人,然后显示与我最相似的前6名,而不是随机的6名

所以,基本上,我如何首先检查,使我没有添加他们作为朋友?表:friends,行:userid和userid2,任一id都可以是我的id
如何选择与我最有共同之处的前6位人士?

仅选择非朋友的人士:

SELECT * FROM users WHERE NOT EXISTS
    (SELECT * 
     FROM friends
     WHERE userid = users.id
           OR userid2 = users.id)
为了匹配标记并比较它们,我更喜欢第三个表

编辑:类似于

SELECT * FROM users
    WHERE NOT EXISTS
        (SELECT * FROM friends WHERE userid = users.id OR userid2 = users.id)
    ORDER BY (SELECT COUNT(*) FROM tags AS t1 LEFT OUTER JOIN tags AS t2 ON t1.tagname = t2.tagname
        WHERE t1.id = users.id)
    LIMIT 6

看起来您有两个表:用户和朋友。你想匹配你的朋友匹配你的用户ID我假设这是朋友中的用户ID 2?并显示用户表中的用户信息

下面的select语句将返回user表中的行,其中users表中的userid与friends表中的userid匹配,userid2字段等于您的用户名。limit语句将仅显示前6个匹配项

SELECT * FROM users
JOIN friends ON users.userid == friends.userid WHERE friends.userid2 == '$id'
LIMIT 6

这并不能解决按大多数匹配的朋友排序的问题。我将把这个留给其他人。

他已经这样做了:朋友存储在一个名为Friends的表中,包含userid和userid2行。哦,是的,我忘记了EXISTS语句,我有多笨:谢谢!这很有帮助,但我不想把它作为答案,因为我仍然不知道如何选出前6名;检查与您的MySQL服务器版本对应的手册,以了解第4行“从标记中选择用户ID作为uid作为t1左外部连接标记作为51作为t1.tagname=”附近使用的正确语法。要么代码中有错误,要么我应该添加一个表,或者更改一些我不知道的内容。如前所述,您需要添加标记表userid | tagname我添加了表标记(u users),其中我有id、userid、tagname,类型和日期我的查询如下:$get_userinfo=mysql_querySELECT*来自不存在的用户选择*来自朋友,其中userid=users.id或userid2=users.id按计数排序从标记中选择userid作为uid\u users作为t1左外部连接标记\u users作为51在t1.tagname=t2.tagname上,其中uid=users.id和type='2'限制6或U错误;我得到了同样的错误。