我在这里使用的连接方式正确吗?试图找出代码中的问题在哪里。尝试更改内部、外部和右连接,只是为了试试。
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;
表结构:https://i.stack.imgur.com/nFUZO.jpg
我得到的输出结果:
西0 东北 0 南 0 其他 0 中西部0
P粉9869374572024-04-02 17:42:02
根据你的架构,看起来internal_profile_views
表示用户资料和查看该资料的用户之间的M:N表。
在这种情况下,internal_profile_views
中具有相同的user_id
和viewed_user_id
值的行表示用户正在查看自己的资料,具有不同值的行表示用户正在查看其他人的资料。
在你的连接语句中,你使用了一个条件,其中user_id
和viewed_user_id
必须匹配相同的users.id
记录才能包含在结果中。很可能你只打算在一个列上进行连接,而不是两个。
在此基础上,你的查询可能是以下之一:
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;