Mysql 从两个表中提取数据并将它们连接在一起
我有一个名为participant_tb的表,表中的列如下 参与者id:1,用户名:“atom”,全名:“abc”参与者id: 2,用户名:“ion”,全名:“def”参与者id:3,用户名: “分子”,全名:“ghi”参与者\u id:4,用户名:“化合物”, 全名:“jkl” 我有另一个表,看起来像这样,这个表叫做follower_tb 跟随id:1,跟随id:1,跟随id:2,跟随id:2, 跟随者id:2,跟随者id:1,跟随者id:3,跟随者id:3, 跟随者id:1,跟随者id:4,跟随者id:1,跟随者id:4 一旦有人单击follow按钮,跟随者的id将存储在follower_id中,被跟随者的id将存储在followerd_id列中。我想做的是:假设参与者id为1 loggedin的“atom”,我想获取他正在跟踪的人和跟踪他的人的列表 我试过这样的方法:Mysql 从两个表中提取数据并将它们连接在一起,mysql,sql,Mysql,Sql,我有一个名为participant_tb的表,表中的列如下 参与者id:1,用户名:“atom”,全名:“abc”参与者id: 2,用户名:“ion”,全名:“def”参与者id:3,用户名: “分子”,全名:“ghi”参与者\u id:4,用户名:“化合物”, 全名:“jkl” 我有另一个表,看起来像这样,这个表叫做follower_tb 跟随id:1,跟随id:1,跟随id:2,跟随id:2, 跟随者id:2,跟随者id:1,跟随者id:3,跟随者id:3, 跟随者id:1,跟随者id:4,
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
我的问题是,它只获取那些跟随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.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,用户名:'molecular',跟随者id:3,跟随者id:
1.
参与者id:1,用户名:“atom”,跟随者id:3,跟随者id:
1.
参与者id:4,用户名:“复合”,追随者id:1,
编号:4
参与者id:1,用户名:“atoom”,追随者id:1,
编号:4
我想要这样的东西:
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
参与者id:2,用户名:“ion”,追随者id:1,后跟id:2,
参与者id:2,用户名:“ion”,追随者id:2,后跟id:1,
参与者id:3,用户名:'molecular',跟随者id:3,跟随者id:
1,参与者id:4,用户名:“复合”,追随者id:1,
编号:4
或者类似的东西(第一行显示atom正在跟踪此人,而此人正在跟踪):
参与者id:2,用户名:“ion”,追随者id:2,后跟id:2,
参与者id:3,用户名:'molecular',跟随者id:3,跟随者id:
1.
参与者id:4,用户名:“复合”,追随者id:1,
编号:4
试试这个:
选择p.participant\u id、p.username、p.fullname、f.follower\u username、f.follower\u username、f.follower\u id 从我的
加入my_followers f ON((p.participant_id=f.follower_id)或(p.participant_id=f.followerd_id))这看起来像是a的作业,它允许您使用一个查询的结果作为另一个查询的输入。事实证明,获取关注者和跟随者的查询非常相似
#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
);
子查询选择participant\u id
1后面的每个follower\u id
,然后使用该id列表从participant\u 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
);
此子查询几乎相同,但它选择所有元素的后跟参与者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
选择p.participant\u id、p.username、p.fullname、f.follower\u username、f.follower\u username、f.follower\u id 从我的 加入我的追随者f ON(p.participant_id=f.follower_id | | p.participant_id=f.followerd_id)
其中p.participant_id!=1和(f.followerd_id=1 | | f.follower_id=1)谢谢,我试过了,第一个查询得到了0行,还有子查询。你能再看看有什么问题吗?值得注意的是,我在查询中使用的表名与你在示例中使用的表名略有不同-你检查过所有表名是否与你的定义匹配吗?是的,我检查过。如果名称是di不过,它会抛出一个错误我不确定在这种情况下会出现什么问题。唯一想到的是您测试的ID没有任何追随者,表有不匹配的ID,一个或多个表中没有数据(我经常犯这个错误…),或格式出现某种问题。听起来您可能无意中使用了
follow\u id
而不是follower\u id
或followerd\u id
而不是查询中的某个位置。您能否提供有关您正在使用的查询、如何调用它和/或表格式的更多信息?是否尝试合并这两种选择统计在一个查询中添加元素?我们拥有的信息越多,我们就越能提供帮助。谢谢,我尝试了这个方法(我只添加了follower_id=1或follower_id=1),但我遇到了我在提问时提到的一个问题,即:它还获取了“atom”的详细信息,这不是我想要的。