Maison  >  Questions et réponses  >  le corps du texte

Requête SQL pour obtenir les utilisateurs qui sont à la fois suivis par quelqu'un et qui suivent cette personne

J'ai un scénario dans lequel je souhaite trouver des utilisateurs qui suivent l'utilisateur X et l'utilisateur X les suit.

Voir l'architecture ci-dessous : Table de base de données avec valeurs de test

Nous avons follower_id et follow_id, Supposons maintenant que nous voulions vérifier si l'utilisateur avec l'identifiant 23 suit quelqu'un et s'il le suit également.

Comme vous pouvez le voir, l'utilisateur 22 suit l'utilisateur 23, Nous voulons donc obtenir les détails de l'utilisateur 22, comme le nom et l'adresse e-mail, à partir de la table utilisateur.

L'utilisateur 23 suit 24, mais l'utilisateur 24 ne suit pas l'utilisateur 23, nous n'inclurons donc pas l'utilisateur 24 dans la liste.

Veuillez m'aider à rédiger la requête pour obtenir la liste des utilisateurs pour le scénario ci-dessus. Merci

Mise à jour

Parce que j'ai besoin de plus d'informations sur l'utilisateur. J'implémente actuellement une solution lente dans Laravel.

$UsersIAmFollowing = UserFollowing::where('follower_id', $user->id)->get();
        $UsersFollowingMe = UserFollowing::where('following_id', $user->id)->get();
        $friends = [];
        foreach ($UsersIAmFollowing as $userIamFollowing) {
            foreach ($UsersFollowingMe as $userFollowingMe) {
                if($userIamFollowing->following_id == $userFollowingMe->follower_id){
                    array_push($friends, User::find($userIamFollowing->following_id));
                }
            }
        }

        dd($friends);

P粉562845941P粉562845941203 Il y a quelques jours298

répondre à tous(1)je répondrai

  • P粉356128676

    P粉3561286762024-03-30 15:18:57

    select t.id 
          ,t.follower_id    
          ,t.following_id
    from   t join t t2 on t2.following_id = t.follower_id 
             and          t.following_id = t2.follower_id
    id follow_id ID_suivant
    7 22 23
    6 23 22

    répondre
    0
  • Annulerrépondre