Извлечение данных из двух таблиц и объединение их - PullRequest
1 голос
/ 08 июля 2019

У меня есть таблица с именем member_tb, столбцы таблицы выглядят так:

member_id: 1, имя пользователя: 'atom', полное имя: 'abc' member_id: 2, имя пользователя: 'ion', полное имя:' def 'участник_ид: 3, имя пользователя:' молекула ', полное имя:' ghi 'участник_ид: 4, имя пользователя:' составная часть ', полное имя:' jkl '

У меня есть другая таблицакак это выглядит, таблица называется follower_tb

follow_id: 1, follower_id: 1, follow_id: 2, follow_id: 2, follow__id: 2, follow_id: 1, follow_id: 3, follower_id: 3, follow_id: 1, follow_id: 4, follower_id: 1, follow_id: 4.

После того, как кто-то нажмет на кнопку «Follow», идентификатор подписчика будет сохранен в follower_id и идентификатореотслеживаемый человек будет сохранен в столбцах follow_id.Что я хочу сделать, так это: скажем, «atom» с member_id 1 loggedin, я хочу получить список тех, за кем он следует и тех, кто следует за ним.

Я пробовал что-то вроде этого:

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

Проблема, с которой я столкнулсяявляется то, что он включает в свой результат атом. Производит что-то вроде этого

member_id: 1, имя пользователя: 'atom', follower_id: 1, follow_id: 2,

member_id: 2, имя пользователя: 'ion', follower_id: 1, follow_id: 2,

участник_ид: 1, имя пользователя: 'atom', follower_id: 2, follow_id: 1, участник_ид: 2, имя пользователя: 'ion', follower_id: 2, follow_id: 1, участник_ид: 3, имя пользователя: «молекула», follower_id: 3, follow_id: 1, участник_ид: 1, имя пользователя: «атом», follower_id: 3, follow_id: 1, участник_ид .: 4, имя пользователя: 'составной ', follower_id: 1, follow_id: 4 участник_ид:1, имя пользователя: 'atoom', follower_id: 1, follow_id: 4

Я хочу что-то вроде этого:

member_id: 2, имя пользователя: 'ion', follower_id: 1, follow_id: 2, участник_ид: 2, имя пользователя: «ion», follower_id: 2, follow_id: 1, участник_ид: 3, имя пользователя: «молекула», follower_id: 3, follow_id: 1, участник_ид .: 4, имя пользователя: 'составной ', follower_id: 1, follow_id: 4

или что-то в этом роде (эта первая строка показывает, что атом следует за этим человеком, а человек следует назад):

member_id: 2, имя пользователя: 'ion', follower_id: 2, follow_id: 2, member_id: 3, имя пользователя: 'молекулы', follower_id: 3, follow_id: 1, участник_id: 4, имя пользователя: 'соединение', follower_id: 1,follow_id: 4

Ответы [ 3 ]

1 голос
/ 08 июля 2019

Это похоже на задание для SQL-запроса , которое позволяет использовать результаты одного запроса в качестве входных данных для другого.Как выясняется, запросы на выборку подписчиков и подписчиков очень похожи.

#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 1, а затем использует этот список идентификаторов, чтобы выбратьимена пользователей из 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 из всех элементов, за которыми следует participant_id 1.

возвращенные значения запроса 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
0 голосов
/ 09 июля 2019

SELECT p.participant_id, p.username, p.fullname, f.follower_username, f.followed_username, f.follower_id FROM my_participants p ПРИСОЕДИНЯЙТЕСЬ к my_followers f ON (p.participant_id = f.follower_id || p.participant_id = f.follow_id) WHERE p.participant_id! = 1 и (f.followed_id = 1 || f.follower_id = 1)

0 голосов
/ 08 июля 2019

попробуйте это:

SELECT 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))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...