2011-09-12 132 views
3

鉴于下表,我试图编写一个查询来返回用户104的朋友的姓名。如何从朋友的表中查询朋友的名字

MySQL表的朋友

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'OR requestee ='$ userid' AND status ='friends'”; $ results = mysql_query($ query) or die(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 />"; 
    } 
} 

回答

3

你基本上看着两个查询 - 一个是104是请求者,另一个是104是请求者。 A 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' 
) 
+0

谢谢你的帮助。我试过这个查询,并在UNION上得到一个错误:#1064 - 你的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法附近使用手动“UNION (SELECT受邀作为friendId 朋友 在这里,请求= 1”在行8 – user418775

+0

我会尽力调试这... – user418775

+0

我只是不得不删除SELECTS周围的括号,它的作用就像一个魅力!谢谢! – user418775