Php 获取跟踪特定用户的用户列表,并检查我是否在跟踪他们

Php 获取跟踪特定用户的用户列表,并检查我是否在跟踪他们,php,mysql,Php,Mysql,我有一个mysql表,由跟随其他用户的用户组成 USER_ID FOLLOW_ID 1 2 1 3 2 4 3 4 6 4 2 6 我是2号用户,所涉及的人是4号用户。你看,有三个人在跟踪4号用户,包括我。我可以查询跟踪4号用户的用户。如果我是否在跟踪这些人,如何添加到查询中?所以我想知道的是谁在跟踪某个特定的用户(本例中为第4位),以及我在跟踪他们中的哪一位 预期结果: USER_ID (No.4 is FO

我有一个mysql表,由跟随其他用户的用户组成

USER_ID FOLLOW_ID
1        2
1        3
2        4
3        4
6        4
2        6
我是2号用户,所涉及的人是4号用户。你看,有三个人在跟踪4号用户,包括我。我可以查询跟踪4号用户的用户。如果我是否在跟踪这些人,如何添加到查询中?所以我想知道的是谁在跟踪某个特定的用户(本例中为第4位),以及我在跟踪他们中的哪一位

预期结果:

USER_ID (No.4 is FOLLOWED BY), DO_I_FOLLOW_HIM
2                              No
3                              No
6                              Yes
正如您从表I(No.2)的最后一条记录中看到的,我正在跟踪6号用户

查询以下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 Fiddle以获取帮助:

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

  • 谁在跟踪一个人
  • 从那张名单上我在跟踪谁
  • 所以你可以尝试使用这样的查询

    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 = ?
    
    @抖动是一个很好的观点,您可能会看到通过使用联接而不是子查询来提高性能(特别是在这是一个大表的情况下)

    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 = ?
    

    通过添加您自己的id和4号用户,我使它变得更容易

    select follow_id
    from follows
    where user_id=2 and follow_id IN (select user_id from follows where follow_id=4)
    

    嗨,切鲁维安。你试过了吗?它只列出了我。还可以尝试选择follow_id以查看您跟踪的是他们中的哪一个追随者。这只会为我提供一个id,我跟踪的是那些跟踪4号用户的人。我需要三个人都跟着那个特定的用户。
    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