我正在構建一個應用程序,用戶可以相互連接(就像任何社交網絡中的朋友一樣)。「朋友的朋友」喜歡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