2010-02-10 131 views
1

我想從具有所有給定權限的權限表中查找用戶(用戶標識符)。 類似於:Mysql查詢找到具有所有給定權限的用戶

選擇用戶標識,權限權限('視圖','刪除','添加','編輯')中的all_of權限。

說明: 這個查詢不是用mysql的權限去做的。這是一個普通的問題,假設我有一個具有以下字段&數據user_permissions表:


userid | permission
1 | view
1 | add
2 | view
2 | delete
2 | add
2 | edit
我所要求的查詢應返回

用戶ID

請讓我知道如果這不明確。

在此先感謝

回答

0
select userid, GROUP_CONCAT(DISTINCT permissions ORDER BY permissions DESC) as permissions_grouped from permissions where permissions in ('view', 'delete', 'add', 'edit') GROUP BY userid HAVING permissions_grouped = "view,edit,delete,add"; 

thise會先得到所有誰擁有任何這些權限的用戶,然後CONCAT所有他們對有序字符串的權限,那麼擁有者將只選擇具有正確字符串的行。

編輯:格式化

+0

它工作。我從來不知道group_concat。非常感謝您的及時回覆。 – CodeTweetie 2010-02-10 17:06:01

+0

group_concat很棒,尤其是與HAVING子句結合使用時。它可以讓你做一些你曾經認爲需要子選擇的東西:-) – 2010-02-10 17:14:18

1

查找到

SELECT * FROM information_schema.user_privileges 
WHERE grantee = '\'root\'@\'localhost\'' 

OR

SHOW GRANTS FOR 'root'@'localhost'; 
+0

感謝您的答覆。這個查詢不是用mysql權限來做的。這是一個通用的問題,假設我有一個user_permissions表,其中包含以下字段和數據: userid |許可 1 |查看 1 |添加 2 |查看 2 |刪除 2 |添加 2 |編輯 我所要求的查詢應返回 用戶ID 請讓我知道這是不明確的。 再次感謝。 – CodeTweetie 2010-02-10 16:54:13

0

你也可以這樣做:

SHOW GRANTS FOR CURRENT_USER; 
+1

但是這不僅僅是顯示所有當前用戶的權限,而不是所有擁有給定權限的用戶? – andrewsi 2012-09-27 15:48:50

相關問題