-4

我正在开发一个社交网络功能的网站,该网站有一个部分,比如你可能知道的 facebook 人,其中包括不是登录用户朋友的人。

表 1“用户”结构:uid(primary)、fname、lname、dob 等。

表 2 'friend_request' 结构:id(primary) uid、fid、created

表 3 'friends' 结构:与 '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 }
        }
       }
      }
     }
    }
  ?>
4

2 回答 2

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

你能向我解释为什么这不是你要找的吗?或者我没有错误地将数据输入数据库?

于 2013-04-16T18:16:16.750 回答
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 的建议。

于 2013-04-16T20:10:03.340 回答