我有一个名为participant_tb的表,表中的列如下
参与者id:1,用户名:“atom”,全名:“abc”参与者id:
2,用户名:“ion”,全名:“def”参与者id:3,用户名:
“molecule”,全名:“ghi”参与者编号:4,用户名:“compound”,
全名:“jkl”
我有另一张这样的桌子,这张桌子叫做follower_tb
跟随id:1,跟随id:1,跟随id:2,跟随id:2,
跟随者id:2,跟随者id:1,跟随者id:3,跟随者id:3,
跟随者:1,跟随者:4,跟随者:1,跟随者:4。
一旦有人点击follow按钮,follower的id将存储在follower_id中,被follower的id将存储在follower_id列中。我想做的是:假设参与者id为1 loggedin的“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,用户名:“分子”,跟随者id:3,跟随者id:
1个,
参与者id:1,用户名:“atom”,跟随者id:3,跟随者id:
1个,
参与者id:4,用户名:'compound',关注者id:1,
跟踪id:4
参与者id:1,用户名:'atoom',关注者id:1,
跟踪id:4
我想要这样的东西:
参与者id:2,用户名:“ion”,跟随者id:1,跟随者id:2,
参与者id:2,用户名:“ion”,跟随者id:2,跟随者id:1,
参与者id:3,用户名:“分子”,跟随者id:3,跟随者id:
1,参与者id:4,用户名:'compound',关注者id:1,
跟踪id:4
或者类似的(第一行显示atom正在跟踪此人,此人正在跟踪此人):
参与者id:2,用户名:“ion”,跟随者id:2,跟随者id:2,
参与者id:3,用户名:“分子”,跟随者id:3,跟随者id:
1个,
参与者id:4,用户名:'compound',关注者id:1,
跟踪id:4
最佳答案
这看起来像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
1后面的每个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
关于mysql - 从两个表中获取数据并将它们连接在一起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56940096/