2015-09-07 84 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