鉴于下表,我正在尝试编写一个返回用户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 />";
}
}
答案 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'
)