2010-04-20 47 views
0

我在我的智慧結束。我瘋狂搜索,閱讀大量的數據庫教科書,上帝知道有多少在線指南,博客和論壇。有人能讓我擺脫苦難嗎?SQL? 「向我展示用戶X可以執行的所有活動。」

PseudoSchema Diagram(警告:雖然漂亮,不是一個格式遠遠趕不上ER圖的主鍵是大膽,外鍵斜體)

鑑於上述設置與用戶到組到權限表,並那麼一系列需要特權才能執行的活動,您如何知道這一點:

請向我展示用戶X可以執行的所有活動。即:用戶X是G組的成員和F;組G和F與特權P,Q,R和S相關聯;向我展示所有需要P,Q,R或S特權的活動。

你是如何做到這一點的?

回答

1
SELECT DISTINCT Activity.id, Activity.name, Activity.description 
    FROM Activity 
    INNER JOIN Privilege ON Activity.requires_privilege = Privilege.id 
    INNER JOIN Group ON Privilege.group_id = Group.id 
    INNER JOIN UserGroup ON Group.id = UserGroup.group_id 
WHERE UserGroup.user_id = :X 

應該得到你想要的。還有其他的選擇。

0
select a.* 
from user u 
inner join usergroup ug on u.id = ug.user_id 
inner join privilege p on ug.group_id = p.group_id 
inner join activity a on p.id = a.requires_privilege 
where u.name = 'X' 
相關問題