连接2个表后,MYSQL显示值未加入

时间:2014-02-19 15:01:10

标签: php mysql

用户

  id firstname lastname    email         avatar
  1     Coman      Paul   x@y.com    ./images/a.png

友谊

 id user1 user2
  1    1     2
  2    1     5
  3    3     1
  4    2     3

用户12,3,5

的朋友

用户21,3

的朋友

通过此查询,我可以显示我的朋友..(id = 1的用户)

select 
    u.firstname, u.lastname, u.email, u.avatar 
from 
    users u
inner join 
    friendships f on f.user2 = u.id 
where 
    f.user1 = 1

union

select 
    u.firstname, u.lastname, u.email, u.avatar 
from 
    users u
inner join 
    friendships f on f.user1 = u.id 
where 
    f.user2 = 1

我想要做的是显示与我不是朋友的其他用户...显然将=更改为<>将无效,因为用户2和3之间的友谊可以因为显示他们不是朋友形式,但在其他方面他们是我的朋友......

那么,在我显示我的朋友列表(第一个查询)之后,如何在其下显示另一个非朋友列表...

为了更好地理解点击Facebook上的帖子,你会看到第一个显示的用户是你的朋友......然后其余的人......

有代码的php部分......

$numrows = mysql_num_rows($querym) or die (mysql_error());

if($numrows!=0)
{

Echo '<div id="members">    <ul >';
while ($row = mysql_fetch_assoc($querym))
{


$firstname = $row['firstname'];
$lastname = $row['lastname'];
$email = $row['email'];
$avatar = $row['avatar'];

Echo '<li>......';
       //printing the variables and all data
     }

   }

1 个答案:

答案 0 :(得分:1)

您希望获得与某个用户没有友谊的所有用户。但是它们可能会以两种方式中的一种出现,所以你必须确保它们不像用户1那样处于友谊中而不是像用户2那样处于友谊中:

select u.firstname, u.lastname,u.email,u.avatar from users u
where id not in (select user1 from friendships where user2 = 1)
and id not in (select user2 from friendships where user1 = 1) 

编辑:您可能还想添加:

and id <> 1

除非在其他地方处理,否则不要将自己显示为非朋友。