2014-03-25 53 views
0

我有一個用戶表和友誼表 用戶(ID,電子郵件,姓名) 友誼(ID,USER_ID,friend_id,確認)查詢找出以下

id | email | name 
1 | xyz  | abc 
2 | yui  | poi 
3 | tar  | foo 
4 | bar  | baz 

與ID此,如果用戶1發送好友請求用戶與當時的ID 2行中友誼的樣子

id    | user_id | friend_id | confirmed 
1(generated key) | 1   | 2   | false 

現在,當用戶接受朋友請求

id    | user_id | friend_id | confirmed 
1(generated key) | 1   | 2   | true 
2    | 2   | 1   | true 

所以我基本上想要做的是找出那些與當前用戶不是朋友的用戶,如果用戶已經是用戶的朋友或者用戶發送了好友請求,那麼結果數組散列不應包含該值。

所以在上面的數據庫的散列的結果陣列應包含id爲3和4

所以在友誼表基本上用戶 user_id是朋友請求發送方ID和朋友id是接收機ID

所以無論user_ID的是CURRENT_USER它不應該有對應於friend_id,反之亦然,其中friend_id是當前用戶不應該與相應的user_id

我希望顯示的用戶的用戶的問題是非常明顯的瞭解

對不起,我英文不好

回答

1

試試這個:

select u.* from users u 
where u.id not in (select user_id id from friendship 
        union 
        select friend_id from friendship); 

如果你也想目前的用戶記錄,以當前用戶ID添加一個OR條款。

select u.* from users u 
where u.id = ? 
    OR u.id not in (select user_id id from friendship 
        union 
        select friend_id from friendship); 

用當前用戶ID填寫參數並執行。

+0

該解決方案看起來非常簡單且合乎邏輯,但在此我可以在哪裏查看上述查詢,僅供當前登錄的用戶使用? –

+0

不可以。您不能從此查詢。因爲,您期待的是不在友誼用戶和朋友ID中的用戶列表。因爲其他用戶可以將他們的朋友ID中的當前用戶的ID也省略。要獲取當前用戶的記錄,只需在上述解決方案中添加一個「OR」子句即可。 –