• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

overcloked

Ajuda com query

2 mensagens neste tópico

Boas ppl tenho a seguinte estrutura de dados:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora