Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

William Espindola

[Resolvido] Select em N-N e Auto relacionamento

Recommended Posts

Ola Tudo bem com vocês?

 

Galera criei três tabelas aqui, e estou tendo algumas dificuldades para fazer o select nelas. As estruturas são estas:

 

Permissaos = id, alias, permissao_id

Users = id, nome, senha

permissaos_users = id, permissao_id, user_id

 

A tabela que tem o auto relacionamento é a Permissaos, então o registro que tiver o campo permissao_id = null é o pai

Eu ja havia feito algo como isto com categorias só que não tinha esta tabela de N-N na parada :huh:

 

Este é o select:

 

SELECT
`Permissao`.`id`,
`Permissao`.`alias` AS 'permissao',
`SubPermissao`.`alias` AS 'subpermissao'
FROM 
`permissaos` AS `Permissao`
INNER JOIN 
`permissaos` AS `SubPermissao` ON (`SubPermissao`.`permissao_id`=`Permissao`.`id`)
INNER JOIN 
`permissaos_users` AS `PermissaoUser` ON (`Permissao`.`id`=`PermissaoUser`.`permissao_id`)
INNER JOIN 
`users` AS `User` ON (`User`.`id`=`PermissaoUser`.`user_id`)
WHERE 
`PermissaoUser`.`user_id` = 1

 

Estou tendo como resultado todas as permissões e subpermissões, não somente as permissões e subpermisões que estão cadastradas para o usuário na tabela permissaos_users.

 

Não sei se consegui ser claro, talvez possa ser porque estou fazendo algo de errado.

 

Agradeço a quem ajudar. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa consegui! :clap:

 

SELECT
`Permissao`.`id`,	
`Permissao`.`alias` AS 'Permissao',
`SubPermissao`.`alias` AS 'SubPermissao',
`SubPermissao`.`id`
FROM `permissaos` AS `Permissao`
JOIN `permissaos` AS `SubPermissao` ON (
`SubPermissao`.`permissao_id`=`Permissao`.`id`
) AND (
`SubPermissao`.`permissao_id` IS NOT NULL
)
INNER JOIN `permissaos_users` AS `PermissaoUser` ON (
`PermissaoUser`.`permissao_id`=`SubPermissao`.`id`
)
WHERE `PermissaoUser`.`user_id` = 1

 

Fecha a conta e passa a régua!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.