我正在开发一个社交网络功能的网站,该网站有一个类似于您可能知道的Facebook人员,其中包含不是登录用户朋友的人。
表1'用户'结构: UID(主), FNAME, lname,dob等。
表2'friends_request'结构: ID(主) UID, FID, 创建
表3'朋友'的结构: 与'friend_request'相同
我想向除登录用户和他/她的朋友以外的其他人展示。因为我想保持简单。
MYSQL查询如下:
<?php
/*
section for displaying random person who are not friends.
*/
$q =mysql_query("select * from users where uid!='".$_SESSION["logged"]."'");
if(mysql_num_rows($q)>0)
{
while($fetch=mysql_fetch_array($q))
{
$sel=mysql_query("select * from friends where (uid='".$fetch["uid"]."' and
fid!='".$_SESSION["logged"]."') or
(uid!='".$_SESSION["logged"]."' and fid='".$fetch["uid"]."')") or
die(mysql_error());
$num_rows=mysql_num_rows($sel);
if($num_rows>0)
{
while($rows=mysql_fetch_array($sel))
{
$que=mysql_query("select * from users where uid='".$rows['uid']."' or
uid='".$rows['fid']."'");
if(mysql_num_rows($que)>0)
{
while($names=mysql_fetch_array($que))
{
?>
<li><a href="user_index1.php?id=<?php echo $names['uid']; ?>"><strong>
<?php echo $names['fname']." ".$names['lname'] ?></strong></a></li>
<?php }
}
}
}
}
}
?>
答案 0 :(得分:0)
你试过了吗?
$sql = "SELECT * FROM `users`
WHERE `id` NOT IN
(SELECT `fid` FROM `friends` WHERE `uid` = ".$_SESSION["logged"].")
AND `id` != ".$_SESSION["logged"].";";
$que = mysql_query($sql);
根据你的评论,我认为彼此错过了解。我在MySQL数据库中重新创建了以下表格,如下所示:
用户强>
id fname lname
1 Bob1 One
2 Bob2 Two
3 Bob3 Three
4 Bob4 Four
5 Bob5 Five
<强>朋友强>
id uid fid
1 5 2
2 5 3
3 3 1
4 2 1
5 2 4
然后当我运行以下查询时:
SELECT * FROM `users`
WHERE `id` NOT IN
(SELECT `fid` FROM `friends` WHERE `uid` = 1)
AND `id` != 1
我得到以下结果:
uid fname lname
2 Bob2 Two
3 Bob3 Three
4 Bob4 Four
5 Bob5 Five
你能解释一下为什么那不是你想要的吗?或者我没有错误地将数据输入数据库?
答案 1 :(得分:0)
解决方案是:
SELECT * FROM `users` WHERE `uid` NOT IN
(SELECT `uid` FROM `friends` WHERE `uid` = 1 or 'fid' = 1 union SELECT `fid` FROM 'friends' WHERE 'uid'=1 or 'fid'=1)
AND `uid` != 1;
这将显示不是登录用户的uid = 1的朋友。谢谢 @RachelID的建议。