如何从朋友的表中查询朋友的姓名

时间:2011-09-12 14:01:08

标签: mysql

鉴于下表,我正在尝试编写一个返回用户104朋友名字的查询。

MYSQL TABLE好友

id | requester | requestee | status
--------------------------------------
1  | 140       | 104       | 'friends'
2  | 104       | 151       | 'friends'

我试过这个但是它不太正确,因为它返回用户140的名称(这是正确的)和用户104的名称(这是不正确的 - 我想要用户151的名字)。我意识到我的部分问题是由于“ON f.requester = u.id”,但我不确定如何编写查询以获得我想要的内容。

SELECT u.name
FROM users u
INNER JOIN friends f ON f.requester = u.id
WHERE (
f.requester =104
AND STATUS = 'friends'
)
OR (
f.requestee =104
AND STATUS = 'friends'
)
LIMIT 0 , 30 

感谢任何帮助。感谢。

更新:我还尝试制作“更大的查询”并使用PHP来提取我需要的内容。这种工作但我到目前为止只能获取用户ID。     $ query =“SELECT * FROM friends WHERE requester ='$ userid'或者requestee ='$ userid'     AND status ='friends'“;     $ results = mysql_query($ query)      或者死(mysql_error());

$count = 0;
while ($row = @mysql_fetch_assoc($results)){
  $count++;
  if ( !is_null($row['requester']) ) {
    $requester = $row['requester'];
    $requestee = $row['requestee'];
    if($requester == $userid)
      echo $requestee . "<br /><br />";
    else
      echo $requester . "<br /><br />";
  }
}

1 个答案:

答案 0 :(得分:3)

你基本上是在查看两个查询 - 一个是104是请求者,另一个是104是被请求者。 UNION查询可以将这些组合起来,以便您可以在结合或子选择中使用结果。

SELECT u.name
FROM users u
WHERE u.id IN (
    SELECT requester as friendId
    FROM friends
    WHERE requestee = 104
    AND STATUS = 'friends'
    UNION
    SELECT requestee as friendId
    FROM friends
    WHERE requester = 104
    AND STATUS = 'friends'
)