获取特定用户之后的用户列表,并检查我是否关注他们

时间:2014-07-16 18:22:56

标签: php mysql

我有一个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

3 个答案:

答案 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)

要获取您关注的另一个给定用户的用户列表,您需要使用子查询。你在上面写的时候可以看到它,你要问两件事

  1. 谁是关注人A
  2. 从该列表中我是谁。
  3. 所以你可以尝试使用像这样的查询,

    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)