我有一个跟踪我的数据库中的关系的朋友表 - 我已经将查询与子查询放在一起,从朋友的朋友那里获取个人资料信息
我的朋友表看起来如下所示 - 身份证两次进入两次。我是id为1的用户 - 我的朋友将是5& 3
rel 1 | rel 2
--------------
1 | 5
5 | 1
3 | 5
5 | 3
1 | 3
3 | 1
我的查询看起来像
SELECT user_id, first_name, last_name, email, town, county, profile_img_small
FROM sign_up
WHERE user_id IN (SELECT DISTINCT f.rel2 FROM friends f
WHERE f.rel1 IN (SELECT f2.rel2 FROM friends f2 WHERE f2.rel1 = '$my_id') AND f.rel2 ! = '$my_id') ORDER BY first_name ASC, last_name ASC
问题在于,该剧本旨在向您推荐的人提供建议,但仍然包括我朋友列表中的人。
如何提取相同的查询,不包括我已经是朋友的用户
答案 0 :(得分:2)
请改为尝试:
SELECT *
FROM sign_up
WHERE user_id NOT IN
(
SELECT rel1 FROM friends WHERE rel2 = '$my_id'
UNION
SELECT rel2 FROM friends WHERE rel1 = '$my_id'
)
答案 1 :(得分:0)
我接下来的查询是 - 我基本上在最后添加了另一个子查询
SELECT user_id, first_name, last_name, email, town, county, profile_img_small
FROM sign_up
WHERE user_id IN (SELECT DISTINCT f.rel2 FROM friends f
WHERE f.rel1 IN (SELECT f2.rel2 FROM friends f2 WHERE f2.rel1 = '$my_id') AND f.rel2 != '$my_id') AND user_id NOT IN (SELECT rel2 FROM friends WHERE rel1 = '$my_id') ORDER BY first_name ASC, last_name ASC