【发布时间】:2021-10-07 09:59:35
【问题描述】:
我有复杂的 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' CONDITION (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' 不应该在完整成员页面结果中看到所有 '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_status=‘0’ -> 这意味着‘user_id’等待‘user_id_resquest’接受友谊 -> 登录‘user_id’时不显示在完整成员列表中 friend_status='1' -> 这个 'user_id' 和 'user_id_resquest' 已经是共同的朋友。 -> 登录 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 +
+—————————+—————————————+
【问题讨论】:
-
我迷路了。通过显示您开始使用的数据,然后解释条件并显示您想要的结果,您的解释将真正受益。
-
这不是一个好的问题标题。请edit更好地表达您的问题的症结。
-
我们需要朋友状态 = 2 的样本数据才能拥有minimal reproducible example。
-
如果状态为
2会怎样?你说这意味着用户被阻止但没有提到它是否应该显示在结果中。数据样本也没有任何带有status=2的单元格。 -
friend_status = '0' // 待处理,friend_status = '1' //共同好友,friend_status = '2' // 已屏蔽