从两个表中获取数据并将它们连接在一起

时间:2019-07-08 17:43:44

标签: mysql sql

我有一个名为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

3 个答案:

答案 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)