如何编写这个mysql查询

时间:2013-04-16 17:54:57

标签: php mysql

我正在开发一个社交网络功能的网站,该网站有一个类似于您可能知道的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 }
        }
       }
      }
     }
    }
  ?>

2 个答案:

答案 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的建议。