2017-08-15 189 views
0

我有存储在用户表中的用户对象。查询从多对多关系中获取对象

我有存储在权限表中的权限对象。

我有一个MTM_UsersPermissions表,它将多个用户对象映射到多个权限对象。如果User.id = 1Permission.id = 10,并且该用户拥有此权限,则在MTM_UsersPermissions中有ID_A = 1ID_B = 10的记录。

我想获得与给定用户相关的所有权限,知道用户ID。

我有一个有点功能查询: SELECT Permissions.id, Permissions.Name, Permissions.Title, Permissions.Description, Permissions.OwnerURI FROM Permissions JOIN OTM_UsersPermissions ON OTM_UsersPermissions.ID_B = Permissions.id JOIN Users ON OTM_UsersPermissions.ID_A = :user_id;

(其中user_id是用户的ID)

但这似乎仅检索与每个用户相关联的权限。但是,每个权限都与Users表中存在的用户数重复。例如,如果用户分配了一个权限,但总共有五个用户,则将检索到正确的权限,但每个权限将有五个。

我对JOIN语句没有太多经验。我试图用这个答案来获得一个可行的解决方案,但仍然缺乏一些东西。 Clean way to get foreign key objects in PHP MySQL query

使用MySQL 5.5。

我错过了什么?

ilmiont

回答

1

您没有加入用户表,你OTM_UsersPermissions表由用户ID已经将被用于过滤结果:

SELECT Permissions.id, Permissions.Name, Permissions.Title, Permissions.Description, Permissions.OwnerURI FROM Permissions JOIN OTM_UsersPermissions ON OTM_UsersPermissions.ID_B = Permissions.id 
WHERE OTM_UsersPermissions.ID_A = :user_id; 
+0

谢谢你迅速的反应,工作完全如预期:) – Ilmiont