只取得不是你朋友的人

时间:2013-05-25 17:43:03

标签: 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['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个随机的人。

所以基本上,我如何首先检查所以我没有将它们添加为朋友? (表:朋友,行:userid和userid2,id都可以是我的id) 如何选择与我最常见的前6名人员?

2 个答案:

答案 0 :(得分:8)

仅选择不是朋友的人:

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

答案 1 :(得分:0)

您似乎有两个表:usersfriends。您希望匹配与friends匹配的userid(我假设这是userid2中的friends?)并显示表users中的用户信息。

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

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

这并不涉及大多数朋友的排序。我会把它留给别人。