2011-10-29 13 views
2
SELECT user_id FROM user_accounts 
INNER JOIN roles_users 
ON (user_accounts.user_id = roles_users.user_id) 
WHERE roles_users.role_id IN (1) 

私は何を試していますか。SQLのユーザーロールが1つの場合のみ選択します

私が望むのは、すべてのユーザーuser_id(ユーザー(role_id 1)のみ)を選択することです。私のアプリケーションでは、誰もがrole_id 1を持っていて、パートナー、管理者などの場合は2,3,4のどちらかでuser_idとrole_idで新しい行を取得します。

どのようにすれば、すべてのユーザーを選択できますか?user_id role_idで1行しか持たないのですか?

MySQLの

+0

この記事で私の答えをチェックしてください:http://stackoverflow.com/questions/6005240/best-way-to-implement-permissions/6005488#6005488 – dqhendricks

答えて

1
SELECT user_accounts.user_id, COUNT(roles_users.user_id) AS cnt 
FROM user_accounts 
INNER JOIN roles_users ON (user_accounts.user_id = roles_uers.user_id) 
GROUP BY user_id 
HAVING (cnt = 1) 
0

は1つのだけの行を持って結果を制限しHAVING句でGROUP BYを使用することができます。

SELECT user_accounts.user_id FROM user_accounts 
INNER JOIN roles_users 
ON (user_accounts.user_id = roles_users.user_id) 
WHERE roles_users.role_id = 1 
GROUP BY user_accounts.user_id 
HAVING COUNT(user_accounts.user_id) = 1 
0

どのようにこの

SELECT user_id 
FROM roles_users 
GROUP BY user_id 
HAVING COUNT(*) = 1 and MIN(role_id) = 1 

のようなものについてのあなた次のように書くこともできます:

SELECT user_id 
FROM roles_users RU 
WHERE role_id = 1 
AND NOT EXISTS(SELECT * FROM roles_users WHERE role_id <> 1 and user_id = RU.user_id) 
関連する問題