2017-08-15 3 views
0

ユーザーオブジェクトにユーザーオブジェクトが格納されています。多対多リレーションシップからオブジェクトを取得するクエリ

PermissionsオブジェクトがPermissionsテーブルに格納されています。

複数のUserオブジェクトを複数のPermissionオブジェクトにマッピングするMTM_UsersPermissionsテーブルがあります。 User.id = 1Permission.id = 10の場合、このユーザーにはこのアクセス許可があります。ID_A = 1ID_B = 10のMTM_UsersPermissionsにレコードがあります。

ユーザーIDを知っている特定のユーザーに関連付けられたすべてのアクセス許可を取得したいと考えています。

Iは多少機能クエリ有する:これは、各ユーザに関連付けられた権限のみを取得するように見えるん

user_idユーザの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;

を。ただし、各アクセス許可は、Usersテーブルに存在するユーザー数によって複製されます。たとえば、ユーザーに1つの権限が割り当てられていても合計5人のユーザーがいる場合は、適切な権限が取得されますが、それぞれに5つの権限が割り当てられます。

私は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

関連する問題