Maison > Questions et réponses > le corps du texte
Est-ce que j'utilise la bonne méthode de connexion ici ? Essayer de comprendre où se situe le problème dans le code. Essayez de changer les jointures intérieures, extérieures et droites, juste pour l'essayer.
SELECT users.region, count(internal_profile_views.user_id) from users Left JOIN internal_profile_views ON users.id = internal_profile_views.user_id AND users.id = internal_profile_views.viewed_user_id GROUP BY users.region;
Structure du tableau : https://i.stack.imgur.com/nFUZO.jpg
Le résultat que j'obtiens :
Ouest 0 Nord-est 0 Sud 0 Autres 0 Midwest 0
P粉9869374572024-04-02 17:42:02
Selon votre schéma, il semble que internal_profile_views
représente un tableau M:N entre les profils utilisateur et les utilisateurs qui ont consulté ce profil.
Dans ce cas, les lignes en internal_profile_views
中具有相同的user_id
和viewed_user_id
avec les mêmes valeurs user_id
et viewed_user_id
signifient que l'utilisateur consulte son propre profil, et les lignes avec des valeurs différentes signifie que l'utilisateur consulte les informations d'autres personnes.
Dans votre déclaration de jointure, vous avez utilisé une condition dans laquelle les user_id
和viewed_user_id
必须匹配相同的users.id
enregistrements peuvent être inclus dans le résultat. Très probablement, vous avez seulement l'intention de vous inscrire sur une colonne, pas deux.
Sur cette base, votre requête peut être l'une des suivantes :
SELECT viewer.region as Viewer_Region, count(views.user_id) as Unique_Viewers FROM internal_profile_views views INNER JOIN users viewer ON views.user_id = viewer.id GROUP BY viewer.region;
SELECT profileOwner.region as Profile_Region, count(views.user_id) as Unique_Viewers FROM internal_profile_views views INNER JOIN users profileOwner ON views.viewed_user_id = profileOwner.Id INNER JOIN users viewer ON views.user_id = viewer.id GROUP BY users.region;