查询从多对多关系中获取对象

时间:2017-08-15 11:58:21

标签: mysql many-to-many

我将User对象存储在Users表中。

我将Permission对象存储在Permissions表中。

我有一个MTM_UsersPermissions表,它将多个User对象映射到多个Permission对象。如果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 个答案:

答案 0 :(得分:1)

您不必加入Users表,您的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;