2010-01-14 143 views
1

有沒有一種方法來查詢用戶表是這樣的:包含從角色表的用戶表管理角色

| id | username | 
----------------- 
| 1 | user1 | 
| 2 | user2 | 
| 3 | user3 | 

和user_roles表:

| id_user | id_role | 
--------------------- 
| 1 | 1 | 
| 1 | 2 | 
| 1 | 3 | 
| 2 | 2 | 
| 3 | 1 | 

假設id爲這個角色= 1是admin角色,產生的結果看起來像這樣:

| id | username | admin | 
------------------------- 
| 1 | user1 | Y | 
| 2 | user2 | N | 
| 3 | user3 | Y | 

我認爲它可以使用嵌套的SELECT語句來完成,但我想知道是否可以使用JOIN。

編輯: 管理列值不必爲Y或N,也可以是管理角色ID(1)或NULL或任何可以讓我知道,如果用戶是管理員

回答

1

我想試試這個:

select u.id, u.username, if (id_role is null, 'N', 'Y') as is_admin 
    from users u 
    left outer join user_roles r 
    on u.id = r.id_user and r.id_role = 1 

但我不是100%肯定。

+0

謝謝。這工作完美! – LukeP 2010-01-14 13:08:11

+0

不客氣,很高興聽到它。 – 2010-01-14 13:39:31

1

好,你可以像這樣加入,這會給你結果中的id_role

SELECT u.*, r.id_role 
FROM users u 
LEFT JOIN user_roles r 
ON u.id=r.id_user 

您可以添加WHERE r.id_role=1得到公正的管理員等

但要獲得管理員爲「Y」或「N」爲你想要的,你可以在id_role是否使用IF 1還是不。

SELECT u.*, IF(r.id_role = 1, "Y", "N") as admin 
FROM users u 
LEFT JOIN user_roles r 
ON u.id=r.id_user 
+0

如果用戶具有多個角色,則會導致重複的行。我可以GROUP BY用戶名,但我無法控制管理員列中顯示哪個角色 – LukeP 2010-01-14 13:04:20

0
select u.id_user, if(count(1) > 0, 'Y', 'N') 
from user u left outer join user_roles ur on u.user_id = ur.user_roles 
where ur.id_role=1 
group by u.id_user 
我不使用MySQL的

,所以只是用Google搜索它有「如果」的功能,如果說的不對,用DECODE更換,COALESCE或類似。