我正在构建一个用户可以相互连接的应用程序(类似于任何社交网络中的朋友).
我在具有以下结构的表中保存连接:
id_user1 | id_user2 | is_accepted | is_blocked | created_at
Run Code Online (Sandbox Code Playgroud)
用户之间的连接是双向的,因此当连接两个用户时,表中只有一条记录.无论user_id是在里面id_user1还是在列中id_user2.
现在我需要写一个SQL查询来获取的已经不是用户的朋友一定用户的"朋友的朋友".此外,用户必须被接受而不被阻止.
在简历中,以下是我需要执行的步骤.
找到我想要的用户相关联的所有用户ID(id_user1 = current_user或id_user2 = current_user和is_accepted和!blocked)
返回user_ids的的foreach - >获取所有相关用户(忽略与当前用户协会)(确保它是accepted和!blocked也).
我怎么能这样查询?
谢谢你的帮助.
SELECT CASE f2.id_user1 WHEN CASE f1.id_user1 WHEN $user THEN f1.id_user2 ELSE f1.id_user1 END THEN f2.id_user2 ELSE f2.id_user1 END
FROM friends f1
JOIN friends f2
ON f2.id_user1 = CASE f1.id_user1 WHEN $user THEN f1.id_user2 ELSE f1.id_user1 END
OR f2.id_user2 = CASE f1.id_user1 WHEN $user THEN f1.id_user2 ELSE f1.id_user1 END
WHERE (f1.id_user1 = $user OR f1.id_user = $user)
AND f1.is_accepted = 1
AND f2.is_accepted = 1
AND f1.is_blocked = 0
AND f2.is_blocked = 0
AND NOT (f1.id_user1, f1.id_user2) = (f2.id_user1, f2.id_user2)
Run Code Online (Sandbox Code Playgroud)
请注意,最好首先存储用户最少的用户,然后存储最大的用户。在这种情况下,查询会更简单。