0

我想查询 3 个不同的表。 在此处输入图像描述

我的方法是从FRIENDS TABLE获得朋友。因此,输出将是: 在此处输入图像描述

我试过这个解决方案

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"。那不是我想做的!如果用户登录,查询将获取他所有的朋友......我怎样才能以更简单和更好的方式做到这一点?

4

1 回答 1

1

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

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

我们可以很容易地把它写成一个 UNION,注意一个 UNION 将消除重复条目,因为登录的用户已经加了一个用户的好友,而这个用户也加了登录的用户的好友(所以表中有两个条目friends带有user_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;

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

于 2012-05-28T04:34:46.090 回答