5

我需要帮助从表中查询friendID。我的表存储了两个一起成为朋友的成员的用户 ID。

但是为了存储两个成员的“友谊”,我必须存储两个这样的记录:

friendshipID |  userID  |  friendID  
1            |  5       |  10
2            |  10      |   5

然而,当我们真的只需要存储第一条记录时,这对数据库来说似乎很重,因为它包含两个成员的两个 id 就足够了。

但是,当我想查询ID=5的朋友的记录时,麻烦就来了。有时 ID 在 userID 列中,有时在friendID 列中。

这是我正在使用的查询:

SELECT *
FROM friends
WHERE userID = '5'
   OR friendID = '5'

但我想做的是这样的

SELECT 
if $userID=5 then userID as myfriend
else friendID=5 then friendID as myfriend
FROM friends WHERE userID='5' OR myfriendID='5'

希望这是有道理的。最后,我想拥有成员#5 的所有朋友 ID,而不是以 #5 作为朋友或用户的结果......而只是他的朋友。

4

1 回答 1

4

此查询将返回 #5 的朋友的 ID 值和名称,如此SQL Fiddle 示例所示

SELECT f.FriendId AS FriendId
   , u.Name AS FriendName
FROM FriendTable AS f
INNER JOIN UserAccount AS u ON f.FriendId = u.UserId
WHERE f.UserId = 5

UNION

SELECT f.UserId AS FriendId
   , u.Name AS FriendName
FROM FriendTable AS f
INNER JOIN UserAccount AS u ON f.UserId = u.UserId
WHERE f.FriendId = 5

UNION删除重复项,使此查询既适用于单条朋友记录,也适用于您在评论中提到的 2 条记录友谊。不过,您不应该需要 2 条记录的友谊,因为没有新信息存储在第二条记录中,而只有一条记录是无法获得的。

于 2012-10-20T02:11:15.417 回答