我有一个名为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_id1后面的每个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_id1的所有元素的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/

10-11 17:36
查看更多