gpt4 book ai didi

php - 成员(member)列表SQL查询不显示共同好友、待批好友、屏蔽好友

转载 作者:行者123 更新时间:2023-12-04 12:21:46 25 4
gpt4 key购买 nike

我有复杂的 SQL QUERY 我需要一些帮助来解决以下情况:
我正在寻找具有以下条件的 SQL 查询:

SELECT *  FROM Table_1,Table_2 where user_id = ’16’ // 16 = ($_SESSION[ 'SESS_USER_ID' ])
  • 条件 1 -> 不要显示我自己(当前登录用户 ID。=> 16(是我)($_SESSION['SESS_USER_ID']))
  • CONDITION 2 -> 不要在列表中显示 user_id 25, 26, 27, 28 因为它们已经在 table_2 中,因为一些条件 user_id ='16' 和 CONDITION 0,1 来自friend_status
  • 条件 3 -> 按签名更新

  • 我期望的结果示例如下:
    我需要什么-> 我需要显示登录 'user_id' 的所有成员的结果,这些成员不在 Table_2 'friend_status' 条件 (0,1,2) 中
    在下表结果中,您可以看到登录 'user_id'(本例中为 16)无法看到 Table_2 CONDITION (0,1,2) 中的其他 'user_id' 包括他自己作为登录 'user_id' (16)
    //Perfect SQL results for me.
    +—————————+—————————————+
    + user_id +signupdate +
    +—————————+—————————————+
    + 23 + 2020-11-30 +
    +—————————+—————————————+
    + 24 + 2020-11-30 +
    +—————————+—————————————+
    + 28 + 2020-11-30 +
    +—————————+—————————————+
    + 21 + 2020-11-30 +
    +—————————+—————————————+
    我需要什么 -> 我需要一个 SQL QUERY 来显示结果,显示登录 'user_id'(16) 的所有成员,这些成员不在 Table_2 'friend_status' CONDITION (0,1,2) 中
    问题-> 我在下面得到的结果与 Table_2 请求的“friend_status”条件 (0,1,2) 不匹配。
    为什么?因为登录 'user_id' 不应该看到完整成员(member)页面结果中的所有 'friend_status' CONDITION (0,1,2)
    无条件 (0,1,2)
    为什么?因为这些 SQl 结果 CONDITION (0,1,2) 显示在每个 CONDITION (0,1,2) 的 3 个不同结果页面中的其他地方 -> 不是今天的主题。

    //Wrong SQL results for me.
    +—————————+—————————————+
    + user_id +signupdate
    +—————————+—————————————+
    + 16 + 2020-11-30 + <— SHOULD DO NOT SHOW, CONDITION-> ITS ME “login” $user_id = ’16’
    +—————————+—————————————+
    + 23 + 2020-11-30 +
    +—————————+—————————————+
    + 24 + 2020-11-30 +
    +—————————+—————————————+
    + 25 + 2020-11-30 +<— SHOULD NOT SHOW -> TABLE_2 CONDITION user_id = ( $_SESSION[ 'SESS_USER_ID' ])=’16’ AND CONDITION2 friend_status= ‘0’(Pending approval Mutual friends)
    +—————————+—————————————+
    + 26 + 2020-11-30 +<— SHOULD NOT SHOW -> TABLE_2 CONDITION user_id = ( $_SESSION[ 'SESS_USER_ID' ])=’16’ AND CONDITION2 friend_status= ‘0’ (Pending approval Mutual friends)
    +—————————+—————————————+
    + 27 + 2020-11-30 +<— SHOULD NOT SHOW -> TABLE_2 CONDITION user_id = ( $_SESSION[ 'SESS_USER_ID' ])=’16’ AND CONDITION2 friend_status= ‘1’ (Mutual friends)
    +—————————+—————————————+
    + 28 + 2020-11-30 +<— SHOULD NOT SHOW -> TABLE_2 CONDITION user_id = ( $_SESSION[ 'SESS_USER_ID' ])=’16’ AND CONDITION2 friend_status= ‘2’ (Blocked)
    +—————————+—————————————+
    + 21 + 2020-11-30 +
    +—————————+—————————————+


    TABLE_2( friend 关系表)
    friend_status='0' -> 这意味着 'user_id' 等待由 'user_id_resquest' 接受友谊 -> 不要显示在登录 'user_id' 的完整成员列表中
    friend_status='1' -> 这个 'user_id' 和 'user_id_resquest' 已经是共同的 friend 。 -> 不显示在登录 user_id 的完整成员列表中
    friend_status='2' -> 这意味着 'user_id' 被 'user_id_resquest' 阻止 -> 当前登录 user_id 不显示在成员列表中
    +——————————————+—————————+——————————————+—————————————————+
    +friendship_id + user_id + user_id_request + friend_status+
    +——————————————+—————————+——————————————+—————————————————+
    + 1 + 16 + 26 + 0 +//0->Pending
    +——————————————+—————————+——————————————+—————————————————+
    + 2 + 16 + 25 + 0 +//0->Pending
    +——————————————+—————————+——————————————+—————————————————+
    + 3 + 16 + 27 + 1 +//1->Mutual
    +——————————————+—————————+——————————————+—————————————————+
    + 4 + 21 + 27 + 1 +//1->Mutual
    +——————————————+—————————+——————————————+—————————————————+
    + 5 + 16 + 28 + 2 +//2 ->blocked
    +——————————————+—————————+——————————————+—————————————————+
    TABLE_1(所有用户的表)
    +—————————+—————————————+
    + user_id + signupdate +
    +—————————+—————————————+
    + 16 + 2020-11-30 +
    +—————————+—————————————+
    + 23 + 2020-11-30 +
    +—————————+—————————————+
    + 24 + 2020-11-30 +
    +—————————+—————————————+
    + 25 + 2020-11-30 +
    +—————————+—————————————+
    + 26 + 2020-11-30 +
    +—————————+—————————————+
    + 27 + 2020-11-30 +
    +—————————+—————————————+
    + 28 + 2020-11-30 +
    +—————————+—————————————+

    最佳答案

    我不确定以下哪一项对您的真实项目数据会表现得更好,因此我建议您对两者进行基准测试,看看其中一个的表现是否明显优于另一个。
    代码:( Demo )

  • 在准备好的语句中需要 2 个占位符的 Table_1 每一行的子查询(可能效果不佳)
    SELECT user_id, signupdate
    FROM Table_1 AS t1
    WHERE user_id != 16
    AND NOT EXISTS(
    SELECT 1
    FROM Table_2
    WHERE user_id_request = t1.user_id
    AND user_id = 16
    );
  • 左连接在准备好的语句中只需要 1 个占位符:
    SELECT t1.user_id, t1.signupdate
    FROM Table_1 AS t1
    LEFT JOIN Table_2 AS t2 ON t1.user_id = t2.user_id_request
    WHERE 16 NOT IN (t1.user_id, COALESCE(t2.user_id,0))
    AND t2.friendship_id IS NULL;

  • 两个输出:
    | user_id | signupdate |
    | ------- | ---------- |
    | 23 | 2020-11-30 |
    | 24 | 2020-11-30 |
    | 21 | 2020-11-30 |

    关于php - 成员(member)列表SQL查询不显示共同好友、待批好友、屏蔽好友,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68614974/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com