I’m working on a twitter type of following system. I’m joining two tables, users and followers to get the first and lastname of users who are in the followers table. Then I’m running an inner join on the followers table to capture follower and friend relationships. I’m displaying the results as followers (who follows you), following (who you follow), and friends (mutual following).
With the query below, I’m only able to show the name of the user who wants to see their friends. I’d like to show the FRIENDS of the user, not the user’s own name, but can’t figure out how to get the users table to do double duty–that is, show me the name of the user and the name of their friend, or just the friend’s name.
Thanks.
SELECT users.id, users.firstname, users.lastname, followers.follower_user_id, followers.followee_user_id
FROM users
JOIN followers ON followers.follower_user_id = users.id
INNER JOIN followers ff ON followers.followee_user_id = ff.follower_user_id AND followers.follower_user_id = ff.followee_user_id
I believe that your schema requires a union table to assemble the information you need; and it may be more efficient to do this in multiple tables. To maintain a separate table of followers with (possible) duplicate information from users may also be undesireable. A more efficient schema would be:
And then your query would look like:
Which returns: