2014-02-09 32 views
3

我有一個塊用戶系統上:LEFT JOIN表A依賴表B

表A:

------------------- 
id_user | username 
------------------- 
    1 | A 
------------------- 
    2 | B 
------------------- 
    3 | C 
------------------- 
    4 | D 
------------------- 

.... and so on 

表B:

-------------------------------------- 
id_block | user_request | user_banned 
-------------------------------------- 
    1 |  1  |  2 
-------------------------------------- 
    2 |  1  |  3 
-------------------------------------- 
... and so on 

情況#1 :當用戶A從表A獲得用戶列表時,用戶B和用戶C對他隱藏起來。

案例#2:當用戶B從表A中獲得用戶列表時,對用戶A隱藏他時也是如此。

案例#3:當用戶C從表A獲得用戶列表時,用戶A對他隱藏起來也是如此。

案例#4:當用戶D從表A中獲取用戶列表以便獲取所有用戶時。

到目前爲止,我已經試過這樣:

​​

結果是用戶B和C被隱藏!大!

但是,當您將User Id更改爲示例2時,則隱藏了用戶A和C.不是很好,應該只有用戶A隱藏!

當您將用戶ID更改爲4時,隱藏用戶A,B和C.

我做一些例如這種情況:

sqlfiddle User ID 1

sqlfiddle User ID 2

sqlfiddle User ID 3

sqlfiddle User ID 4

P.D.我知道,我可以讓兩個querys有這個解決方案,但必須有解決方案。

+1

[有亞去(http://sqlfiddle.com/#!2/02377/111) – Wrikken

回答

2
SELECT t1.id_user, t1.username 
FROM user t1 
LEFT JOIN block_user t2 
ON 
    (t2.user_request = <current user id> AND t2.user_banned = t1.id_user) 
    OR 
    (t2.user_request = t1.id_user AND t2.user_banned = <current user id>) 
WHERE t2.id_block IS NULL; 

see the fiddle in action for A, B, C & D