我有一个mysql表,其中包含跟随其他用户的用户。
USER_ID FOLLOW_ID
1 2
1 3
2 4
3 4
6 4
2 6
我是第2号用户,有问题的人是第4号用户。你看到有三个人关注我的第4号用户。我可以查询关注用户No.4的用户。如果我关注这些人,我该如何添加查询?所以我想知道的是谁跟踪特定用户(在这种情况下为No.4)以及我正在关注哪一个。
期望的结果:
USER_ID (No.4 is FOLLOWED BY), DO_I_FOLLOW_HIM
2 No
3 No
6 Yes
正如您从表格的最后一条记录中看到的那样,我(第2号)跟随用户No.6。
查询用户No.4之后的人员列表:
$myid = '6';
$userid = '4';
$i = 0;
try {
$stmt = $conn->prepare("SELECT USER_ID FROM FOLLOW WHERE FOLLOW_ID=?");
$stmt -> execute(array($userid));
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$row2[$i] = $row['USER_ID'];
$i++;
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
$response["success"] = 0;
}
示例SQL小提琴帮助:http://sqlfiddle.com/#!2/97ac6
答案 0 :(得分:1)
SELECT him.user_id, IF(i.follow_id,'yes','no') AS i_follow_him
FROM Follows him
LEFT JOIN Follows i ON (i.follow_id = him.user_id AND i.user_id = 2)
WHERE him.follow_id = 4
答案 1 :(得分:0)
要获取您关注的另一个给定用户的用户列表,您需要使用子查询。你在上面写的时候可以看到它,你要问两件事
所以你可以尝试使用像这样的查询,
Select User_ID, Follows_ID
From Follows
Where User_ID = ?
And Follow_ID In (Select User_ID From Follows Where Follow_ID = ?)
查看列表以及您是否关注
Select f.User_ID,
Case When ? In (Select User_ID From Follows Where Follow_ID = f.User_ID) Then 'Yes' Else 'No' End
From Follows f
Where f.Follow_ID = ?
@Shudder提出了一个很好的观点,通过使用连接而不是子查询,您可能会看到性能提升(特别是如果这是一个大表)。
SELECT him.user_id, IF(i.follow_id,'yes','no') AS i_follow_him
FROM Follows him
LEFT JOIN Follows i ON (i.follow_id = him.user_id AND i.user_id = ?)
WHERE him.follow_id = ?
答案 2 :(得分:-1)
我通过添加您自己的ID和用户No.4来更轻松。
select follow_id
from follows
where user_id=2 and follow_id IN (select user_id from follows where follow_id=4)