sql - 获取所有用户朋友

时间:2012-05-28 03:30:43

标签: php mysql sql

我希望查询3个不同的表。 enter image description here

我的方法是从 FRIENDS TABLE 中获取朋友。所以,输出将是: enter image description here

我尝试过这个解决方案

SELECT users.firstname, users.lastname, 
users.screenname, profile.profile_pic, friends.friend_id
FROM website.users users
INNER JOIN website.friends friends ON (users.user_id = friends.friend_id)
LEFT  JOIN profile ON (friends.friend_id = profile.user_id)
WHERE (friends.user_id = "12052822" or friends.friend_id = "12052822")

问题是当它与一条记录匹配时,它会输出“friend.user_id”列。那不是我想做的!如果用户已登录,则查询将获取所有朋友 ...如何以更简单,更好的方式执行此操作?

1 个答案:

答案 0 :(得分:1)

id表中的user_idusers列至少令人困惑?为什么有两个'标识符'列?哪两个加入了friend.user_id?它是否与friend.friend_id连接的列相同?目标是显示friends.user_id是刚刚登录的用户的所有名称,还是friends.friend_id是刚刚登录的用户的所有名称,或两者兼而有之?

在进一步澄清之前,我将假设结果集应该包括两个朋友列表:被用户朋友和用户结识的人。我还假设users.user_id列是加入列。

我们可以轻松地将其写为UNION,并注意到UNION将消除重复条目,因为登录的用户已经为已登录用户的用户提供了支持(因此,在该用户中有两个条目)在friendsuser_id中包含相同值对的friend_id表。

进入TDQD(测试驱动查询设计),我们可以编写(假设新登录的用户是user_id = 12052822):

由用户12052822支持的用户

SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.friend_id = u.user_id
  JOIN website.profile AS p ON p.user_id   = u.user_id
 WHERE f.user_id = 12052822;

拥有用户12052822

的用户
SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.user_id = u.user_id
  JOIN website.profile AS p ON p.user_id = u.user_id
 WHERE f.friend_id = 12052822;

两组用户

SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.friend_id = u.user_id
  JOIN website.profile AS p ON p.user_id   = u.user_id
 WHERE f.user_id = 12052822;
UNION
SELECT u.user_id, u.firstname, u.lastname, u.screenname, p.profile_pic
  FROM website.friends AS f
  JOIN website.users   AS u ON f.user_id = u.user_id
  JOIN website.profile AS p ON p.user_id = u.user_id
 WHERE f.friend_id = 12052822;

您可以单独测试和调试每个组件查询,然后将它们组合起来以创建最终答案。