Jump to content

Ajuda com query


overcloked
 Share

Recommended Posts

Boas ppl tenho a seguinte estrutura de dados:

http://img267.imageshack.us/img267/3545/mydb.th.jpg

Com isto consigo ter:

roles <-> users

role_groups <-> users

role_groups <-> roles

Ou seja um user tanto pode ter roles associadas directamente como ter associadas roles através de grupos.

Agora a minha questão, tenho andado a tentar fazer uma query que me retorna-se todas as roles que um user tem associado incluindo as que estão associadas aos grupos que por sua vez estão associados ao user.

Não me consegui entender com o SQL acabei por fazer através de PHP com várias queries:

uma query que retorna todas as roles associadas directamente ao user

outra que me retorna todos os grupos do user

e outra que retorna todas as roles dos grupos associados ao user

misturando tudo consegui saber que roles estão associadas a um determinado user

No entanto pela minha sanidade e pela performance da aplicação gostaria de transformar estas várias queries em uma, é possivel?

Ob, abraços,

MJS

Link to comment
Share on other sites

Consegui a solução no forum da codeigniter, aqui fica a solução:

SELECT tab_roles.role_id, tab_roles.class, tab_roles.function
FROM tab_roles
LEFT JOIN tab_role_user
ON tab_role_user.role_id = tab_roles.role_id
WHERE tab_role_user.user_id = 30

UNION

SELECT tab_roles.role_id, tab_roles.class, tab_roles.function
FROM tab_roles
LEFT JOIN tab_roles_roleGroup
ON tab_roles_roleGroup.role_id = tab_roles.role_id
LEFT JOIN tab_roleGroup
ON tab_roleGroup.roleGroup_id = tab_roles_roleGroup.roleGroup_id
LEFT JOIN tab_roleGroup_user
ON tab_roleGroup_user.roleGroup_id = tab_roleGroup.roleGroup_id
WHERE tab_roleGroup_user.user_id = 30

Credits to @rno

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.