2015-09-07 95 views
0

我的多對多關係存在問題。如何篩選mysql內部連接查詢的結果

客戶表列: clientID的姓名,地址等

用戶表列: 用戶ID,姓名,地址等

Users_clients列: 用戶ID,clientID的。

每個客戶端可以連接多用戶,用戶可以有多客戶端。

現在我users_clients表包含此:

userID | clientID<br> 
1  | 2 
1  | 3 
2  | 2 
2  | 3 
3  | 3 
3  | 2 
4  | 1 

在我的PHP頁面我想這是不是已經連接到客戶端的用戶列表。

Ex。如果我點擊的客戶端配置文件有clientID = 3 它應該顯示一個未連接到此客戶端的用戶列表。

SELECT u.name, u.email, u.userID FROM users u 
    INNER JOIN users_clients uc 
    ON u.userID = uc.userID 
    WHERE uc.clientID !=3 

這工作正常,但我如何創建我的MySQL查詢,以便如果用戶同時具有clientID 3和客戶端2它不顯示。

此查詢顯示

1 | 2 2 | 2 3 | 2 4 | 1

什麼,我正在尋找的是:

3 | 2 4 | 1

希望這對你有意義。隨意問:)

回答

0

你可以處理不同。

首先請求一個clientId = 3的用戶;

select u.id from users u 
INNER JOIN users_clients uc 
ON u.userID = uc.userID 
WHERE uc.clientID =3; 

然後你可以使用該請求獲取除了那些誰擁有一個clientId所有用戶= 3

最後請求是這樣的:

select u.id from users u where u.id NOT IN (select u.id from users u 
INNER JOIN users_clients uc 
ON u.userID = uc.userID 
WHERE uc.clientID =3); 

希望這會幫助;

+0

非常感謝。這解決了我的問題。 查詢endend這樣看: SELECT u.userID,u.name,u.email來自用戶的ü\t \t \t \t \t \t 其中U。userID NOT IN(從用戶中選擇u.userID)INNER JOIN users_clients uc ON u.userID = uc.userID WHERE uc.clientID =:clientID –

0

您是否嘗試過DISTINCT指令?

select distinct u.id from users u 
INNER JOIN users_clients uc 
ON u.userID = uc.userID 
WHERE uc.clientID =3; 
+0

如果您只想要u.id,則可以減少您的請求:select uc .userID from users_clients uc WHERE uc.clientID = 3; – Fky

+0

這不回答OP請求 – Unex