SQL逻辑 - 来自其他方向的朋友请求

时间:2015-12-03 14:01:12

标签: mysql sql

这是我的样本表:

$user_id = $_SESSION['user_id'];

id   myid    friendid    
-------------------------
1    3       1
2    3       2
3    2       3
4    6       1
5    4       2

现在我想弄清楚如何对这些数据进行排序。 我希望能够根据上述信息获得朋友请求。

对上表进行进一步说明:如果myid为3且friendid为2,则表示3为2的朋友,但反过来则没有必要。

  1. 我只希望数据显示来自其他用户的请求
  2. 不是我们已经是朋友的时候。即id,2& 3
  3. 使用上面的示例表: 假设我当前的会话是2,这意味着我有两个来自表的请求,一个来自3,另一个来自4。因为我是3的朋友,所以不会出现。所以请求应该只显示4。

    我试图为此创建一个逻辑,但我有点迷失。

        WHERE 
        friendid = $user_id
        AND
    

    不确定那里的其他部分会使逻辑到位。

1 个答案:

答案 0 :(得分:1)

鉴于此样本数据:

CREATE TABLE t
    (`id` int, `myid` int, `friendid` int)
;

INSERT INTO t
    (`id`, `myid`, `friendid`)
VALUES
    (1, 3, 1),
    (2, 3, 2),
    (3, 2, 3),
    (4, 6, 1),
    (5, 4, 2)
;

此查询

SELECT
*
FROM
t t_out
WHERE
friendid = 2
AND NOT EXISTS (SELECT 1 FROM t t_in WHERE t_in.friendid = t_out.myid AND t_in.myid = t_out.friendid)

会得到这个结果:

+------+------+----------+
| id   | myid | friendid |
+------+------+----------+
|    5 |    4 |        2 |
+------+------+----------+