我的代码现在看起来像这样
<?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名人员?
答案 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)
您似乎有两个表:users
和friends
。您希望匹配与friends
匹配的userid
(我假设这是userid2
中的friends
?)并显示表users
中的用户信息。
下面的select语句将返回user表中的行,其中users表中的userid
与friends表中的userid
匹配,userid2
字段等于username
。 limit
语句仅显示前6个匹配
SELECT * FROM users
JOIN friends ON users.userid == friends.userid WHERE friends.userid2 == '$id'
LIMIT 6
这并不涉及大多数朋友的排序。我会把它留给别人。