2

SQL问题:

我愿意更改我的表格。如果我应该添加一个 FriendshipRequest tbl 或者 IsActive 是否足以收集所需的信息。或者,如果我应该选择状态:待处理、已接受、已拒绝等。

得到表用户和表友谊。

对于每个有朋友的用户,或来自他自己或他自己的好友邀请待定,插入 2 行。

| UID   | FID   | IsActive |
|  1    |  2    |    1     |
|  2    |  1    |    1     | 

^ 在这里,我们收到了一个从 UID 到 FID 的好友邀请。邀请已被接受,他们是朋友。

| UID   | FID   | IsActive |
|  1    |  2    |    1     | 
|  2    |  1    |    0     | 

^ 在这里,我们收到了一个待处理的邀请,来自 UID 1 > 2 的友谊邀请。另一个用户 (UID:2) 尚未处理邀请。接受/拒绝又名 1/0

| UID   | FID   | IsActive |
|  1    |  2    |    0     | 
|  2    |  1    |    0     | 

^ 在这里,我们收到了拒绝的请求。ID 为 2 的用户已拒绝邀请。将两列都设置为 False / 0。

问题是,我想为以下内容编写查询:获取所有待处理的请求。(IsActive 1 and IsActive = 0) 获取特定用户的所有好友 (Active Friends IsActive = 1)

我使用的表是:用户列:用户 ID 友谊列:用户 ID、朋友 ID、IsActive

我试过 UNION ALL,问题是我不知道如何处理结果。

SELECT 
    u.UserID, u.Username, f.IsActive
FROM Friendship f, [User] u
  WHERE f.UserID = 6 AND f.FriendID = u.UserID AND f.IsActive = 1 

UNION ALL

SELECT 
    u.UserID, u.UserName, f.IsActive
FROM Friendship f, [User] u
  WHERE f.FriendID = 6 AND f.UserID = u.UserID AND f.IsActive = 1 
4

1 回答 1

1

要获取所有待处理的请求,您可以将表加入到自身中,只检查其中一个是否处于活动状态。此设置假定 IsActive 是 a BIT,如果将其设为整数,则可以对它们求和并检查总数

SELECT *
FROM Friendship f1
JOIN Friendship f2
    ON f1.FID = f2.UID
    AND f1.UID = f2.FID
WHERE ((f1.IsActive = 1 AND f2.IsActive = 0)
OR (f1.IsActive = 0 AND f2.IsActive = 1))

并且要让所有活动都处于活动状态,您可以执行相同的操作,但针对特定用户并且两者都处于活动状态

SELECT *
FROM Friendship f1
JOIN Friendship f2
    ON f1.FID = f2.UID
    AND f1.UID = f2.FID
WHERE f1.IsActive = 1 
AND f2.IsActive = 1
AND f1.UID = 5
于 2013-04-17T13:25:19.477 回答