我正在构建一个应用程序,用户可以相互连接(就像任何社交网络中的朋友一样)。“朋友的朋友”喜欢sql查询
我保存在一个表具有以下结构的连接:
id_user1 | id_user2 | is_accepted | is_blocked | created_at
用户之间的连接是双向的,因此当两个用户连接只有一个表中的记录。如果user_id
在id_user1
或id_user2
列表中,则无关紧要。
现在我需要编写一个sql查询来获取某些用户的“朋友的朋友”,这些用户并不是用户的朋友。 此外,用户必须被接受并且不被阻止。
恢复中,这里是我需要执行的步骤。
找到与我希望用户(
id_user1 = current_user
或id_user2 = current_user
和is_accepted
和!blocked
)的foreach返回user_ids的相关联的所有用户ID - >获取所有相关用户(忽略与当前协会用户)(确保它也是
accepted
和!blocked
)。
我该怎么做这样的查询?
感谢您的帮助。
我不认为你真的希望这张桌子是双向的。如果A阻止B但B仍然想从A听到?更不用说,如果你这样做,那么做自我加入会容易得多。 – drysdam 2011-04-26 16:14:50
我想如果A阻止B,不仅他不想听到B,而且也不想让B听到他的消息。 – Andre 2011-04-26 16:19:13
如果你想要达到一个级别,那么自我加入会做...如果你想多走一个级别,那么我想层次查询更好,但我不知道如何在MySQL中实现。 – 2011-04-26 16:22:13