繁体   English   中英

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

[英]Querying to get objects from a many-to-many relationship

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

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

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

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

我对JOIN语句没有太多经验。 我尝试使用此答案来获得可行的解决方案,但仍然缺少一些东西。 在PHP MySQL查询中获取外键对象的干净方法

使用MySQL 5.5。

我想念什么?

ilmiont

您不必加入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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM