Att*_*cus 3 sql union group-by
嘿伙计们 - 我的数据库中有一张表供用户跟随彼此.
该表如下:UniqueID FollowerID FollowedUserID
FollowID是关注其他人的用户ID
FollowedUserID是FollowID用户所关注的人的UserID
我想根据一个用户从这个表中检索一个连接列表.我的查询应该返回当前用户正在关注或遵循的所有其他UserID,没有重叠.
所以说我们在这里有一些条目:
FollowerID FollowedUserID
1 2
1 3
4 1
2 1
Run Code Online (Sandbox Code Playgroud)
这将表明,该用户1是以下用户2和3,因此,用户2和3正在随后用户1.在频谱的另一侧,它显示用户1后跟用户2和3.
我想要做的就是找出用户连接1了,所以查询应回报用户:2,3,4(用户1为下列用户2,3和正在遵循用户4)
如何从单个查询中实现此目的?
一个连接被认为要么被跟踪或者关注的人,所以可能出现一些重复的结果(如果两个用户都下海誓山盟)是可能的.我希望能够将这些结果分组,以便结果明确.
我尝试过类似的UNION查询:
SELECT FollowerID, FollowedUserID From Follows WHERE FollowerID = 1
UNION
SELECT FollowerID, FollowedUserID FROM Follows WHERE FollowedUserID = 1
Run Code Online (Sandbox Code Playgroud)
从理论上讲,我想将Group FollowerID和FollowedUserID放在一起,以保持它们的不同.
我不想检索一个非独特的结果,然后创建一个独特的结果php侧的数据集 - 查询应该只返回不同的值.
你很接近,但你必须颠倒UNION的一个分支中列的顺序:
SELECT FollowerID AS reference_user, FollowedUserID AS connection
FROM Follows
WHERE FollowerID = 1
UNION
SELECT FollowedUserID AS reference_user, FollowerID AS connection
FROM Follows
WHERE FollowedUserID = 1
GROUP BY reference_user;
Run Code Online (Sandbox Code Playgroud)
请注意,如果删除WHERE子句,则会获得所有人的所有连接.