我有一个包含用户信息的表(用户).
我有另一个记录用户视图的表(userview) - 也就是说,当一个用户查看另一个用户详细信息时,我记录了查看者的id以及他/她查看的用户的id.
我想写一个查询,帮助我回答这个问题:
获取查看SPECIFIED用户的用户查看的所有用户的列表.
这似乎是一个直截了当的天真要求,但我想出的SQL(至少在我看来),太复杂了.我认为一个优雅的解决方案是在userview上使用自联接,并且(可能?)用户和用户视图之间的内部联接.
是否有任何SQL'诗人'可以帮助解决这个问题?
我正在使用mySQL 5.x,但理想情况下SQL应该是fb不可知的
让我们从"查看此用户的用户"开始:
select v1.viewer
from userview v1
where v1.viewee = @thisUserId
Run Code Online (Sandbox Code Playgroud)
然后添加"被查看过的用户":
select v2.viewee
from userview v1
inner join userview v2 on v2.viewer = v1.viewer
where v1.viewee = @thisUserId
Run Code Online (Sandbox Code Playgroud)
然后添加用户表以从中获取数据:
select u.userid, u.someotherfields
from userview v1
inner join userview v2 on v2.viewer = v1.viewer
inner join user u on u.userid = v2.viewee
where v1.viewee = @thisUserId
Run Code Online (Sandbox Code Playgroud)