我有一个名为participant_tb的表,该表的列是这样的
participant_id:1,用户名:“ atom”,全名:“ abc” 2,用户名:“ ion”,全名:“ def”参与者ID:3,用户名: 'molecule',全名:'ghi',参与者编号:4,用户名:'compound', 全名:“ jkl”
我还有另一个看起来像这样的表,该表称为follower_tb
关注ID:1,关注者ID:1,关注ID:2,关注ID:2, follower_id:2,followed_id:1,follow_id:3,follower_id:3, following_id:1,follow_id:4,follower_id:1,followed_id:4。
一旦有人单击关注按钮,关注者的ID将存储在follower_id中,被关注者的ID将存储在followed_id列中。我想做的是:假设以“ atomic_id”为1的身份登录的“ atom”,我想获取他关注的人和关注他的人的列表。
我尝试过这样的事情:
SELECT p.participant_id, p.username, p.fullname, f.follower_username, f.followed_username, f.follower_id
FROM my_participants p
JOIN my_followers f ON ( p.participant_id = f.followed_id )
WHERE followed_id = 1 || follower_id = 1
我的问题是,它仅获取了紧随原子之后的对象。
我也尝试过
SELECT p.participant_id, p.username, p.fullname, f.follower_username, f.followed_username, f.follower_id
FROM my_participants p
JOIN my_followers f ON ( p.participant_id = f.follower_id )
WHERE followed_id = 1 || follower_id = 1
我遇到的问题是,它的结果中包含了原子。 产生这样的东西
参与者ID:1,用户名:“ atom”,关注者ID:1,关注ID:2,
参与者ID:2,用户名:“ ion”,关注者ID:1,关注ID:2,
参与者ID:1,用户名:“ atom”,关注者ID:2,关注ID:1, 参与者ID:2,用户名:“ ion”,关注者ID:2,关注ID:1, 参与者ID:3,用户名:“ molecule”,关注者ID:3,关注者ID: 1, 参与者ID:1,用户名:“ atom”,关注者ID:3,关注者ID: 1, 参与者ID:4,用户名:“ compound”,关注者ID:1, follow_id:4 参与者ID:1,用户名:“ atoom”,关注者ID:1 followed_id:4
我想要这样的东西:
参与者ID:2,用户名:“ ion”,关注者ID:1,关注者ID:2, 参与者ID:2,用户名:“ ion”,关注者ID:2,关注ID:1, 参与者ID:3,用户名:“ molecule”,关注者ID:3,关注者ID: 1,参与者ID:4,用户名:“ compound”,关注者ID:1, followed_id:4
或类似的东西(第一行显示原子正在跟随此人,而该人正在追回):
参与者ID:2,用户名:“ ion”,关注者ID:2,关注ID:2, 参与者ID:3,用户名:“ molecule”,关注者ID:3,关注者ID: 1, 参与者ID:4,用户名:“ compound”,关注者ID:1, followed_id:4
答案 0 :(得分:1)
这看起来像一个SQL Subquery的工作,它使您可以将一个查询的结果用作另一个查询的输入。事实证明,获取关注者和关注者的查询非常相似。
#select those FOLLOWING the logged-in account
SELECT p.participant_id, p.username, f.follower_id, f.followed_id FROM participant_tb AS p
JOIN follower_tb AS f ON (p.participant_id = f.follower_id)
WHERE p.participant_id IN (
#make a sub-query to fetch the follower_id's of the entries that follow participant_id 1
SELECT f.follower_id
FROM participant_tb AS p
JOIN follower_tb AS f ON (p.participant_id = f.followed_id)
WHERE participant_id = 1 #your value here
);
子查询选择follower_id
之后的每个participant_id
,然后使用该ID列表从participant_tb
中选择用户名。
#select those BEING FOLLOWED BY the logged-in account
SELECT p.participant_id, p.username, f.follower_id, f.followed_id FROM participant_tb AS p
JOIN follower_tb AS f ON (p.participant_id = f.followed_id)
WHERE p.participant_id IN (
#make a sub-query to fetch the follower_id's of the entries that are being followed by participant_id 1
SELECT f.followed_id
FROM participant_tb AS p
JOIN follower_tb AS f ON (p.participant_id = f.follower_id)
WHERE participant_id = 1 #your value here
);
此子查询几乎完全相同,但是它选择了followed_id
1之后的所有元素的participant_id
。
查询1的返回值:
particiapnt_id username follower_id followed_id
2 ion 2 1
3 molecule 3 1
查询2的返回值:
particiapnt_id username follower_id followed_id
2 ion 1 2
4 compound 1 4
答案 1 :(得分:0)
尝试这个:
选择p.participant_id,p.username,p.fullname,f.follower_username,f.followed_username,f.follower_id 来自my_participants p 加入my_followers f ON((p.participant_id = f.follower_id)或(p.participant_id = f.followed_id))
答案 2 :(得分:0)
选择p.participant_id,p.username,p.fullname,f.follower_username,f.followed_username,f.follower_id 来自my_participants p 加入my_followers f ON(p.participant_id = f.follower_id || p.participant_id = f.followed_id) p.participant_id!= 1和(f.followed_id = 1 || f.follower_id = 1)