2017-08-15 192 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