-2

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

<?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 个随机的。

所以基本上,我如何首先检查我没有将他们添加为朋友?(表:朋友,行:userid 和 userid2,任何一个 id 都可以是我的 id) 我如何选择与我最相似的前 6 个人?

4

2 回答 2

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
于 2013-05-25T17:51:29.737 回答
0

看起来你有两个表:usersfriends. 您想匹配您的friends匹配项userid(我假设这是userid2friends?)并显示表中的用户信息users

下面的 select 语句将从用户表中返回行,其中用户表中的 与朋友表中的userid匹配并且字段等于您的. 该语句将仅显示前 6 个匹配项useriduserid2usernamelimit

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

这并没有解决按朋友最多匹配的排序问题。我会把它留给别人。

于 2013-05-25T17:55:59.067 回答