【问题标题】:Querying to get objects from a many-to-many relationship查询从多对多关系中获取对象
【发布时间】:2017-08-15 20:07:22
【问题描述】:

我将用户对象存储在用户表中。

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

我有一个 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)

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

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

使用 MySQL 5.5。

我错过了什么?

不知道

【问题讨论】:

    标签: mysql many-to-many


    【解决方案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;
    

    【讨论】:

    • 感谢您的及时回复,完全符合预期:)