Ir para conteúdo

POWERED BY:

Arquivado

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

lokaodomau

CROSS JOIN é correto utilizar?

Recommended Posts

Fala galera, no momento estou com uma dúvida.

 

Estou fazendo N relacionamentos, e em determinado momento utilizei o CROSS JOIN, mas não sei se da maneira que estou utilizando está correta. Criei uma VIEW para relacionar a tabela `paginas_acesso`, `processo_pagina_acesso`, `processos`, `processo_grupo` e `tbl_grupo_acesso`, e que seja exibido somente o que não foi bloqueado (`dt_bloqueio` = '0000-00-00 00:00:00', ou seja, campo NOT NULL):

 

- VIEW `view_menu_acesso`:

CREATE OR REPLACE
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`%` 
    SQL SECURITY INVOKER
VIEW `view_menu_acesso` AS
SELECT 
	pa.id AS id_pagina,
	pa.descricao AS descricao_pagina,
	pa.endereco AS endereco,
	pa.pagina_restrita AS pagina_restrita,
	pa.item_menu_pai AS item_pai,
	pa.posicao_menu AS posicao_menu,
	pa.dt_cadastro AS pg_restrita_desde,
	IF(g.id IS NOT NULL OR pa.pagina_restrita = 0, 1, NULL) AS permissao,
	ppa.dt_cadastro AS pg_autorizada_desde,
	p.id AS id_processo,
	p.descricao AS nome_processo,
	p.dt_criacao AS processo_desde,
	p.link_cad_usuarios AS link_cadastro_usuarios,
	g.id AS id_grupo,
	g.descricao AS nome_grupo,
	pg.dt_cadastro AS grupo_desde
FROM
	paginas_acesso pa
LEFT JOIN processo_pagina_acesso ppa ON ppa.id_pagina = pa.id
	AND ppa.dt_bloqueio = '0000-00-00 00:00:00'
LEFT JOIN processos p ON p.id = ppa.id_processo
	AND p.dt_bloqueio = '0000-00-00 00:00:00'
LEFT JOIN processo_grupo pg ON pg.id_processo = p.id
	AND pg.dt_bloqueio = '0000-00-00 00:00:00'
LEFT JOIN tbl_grupo_acesso g ON g.id = pg.id_grupo
	AND g.dt_bloqueio = '0000-00-00 00:00:00'

Depois disso, fiz um SELECT com um CROSS JOIN para relacionar a tabela `usuarios_grupo` ás páginas restritas, depois disso fiz um INNER JOIN para consultar o id do usuário, e assim saber se o usuário X tem acesso á página Y:


SELECT
	v.id_pagina,
	v.descricao_pagina,
	v.endereco,
	v.pagina_restrita,
	v.item_pai,
	v.posicao_menu,
	v.pg_restrita_desde,
	v.permissao,
	IF( SUM( v.permissao ) >= 1, 1, 0) permissao,
	v.pg_autorizada_desde,
	v.id_processo,
	v.nome_processo,
	v.processo_desde,
	v.link_cadastro_usuarios,
	v.id_grupo,
	v.nome_grupo,
	v.grupo_desde AS perfil_desde,
	ug.dt_criacao AS perfil_usuario_desde,
	tu.id AS id_usuario
FROM
    view_menu_acesso v
CROSS JOIN usuarios_grupo ug
INNER JOIN tbl_usuarios tu
	ON tu.id = ug.id_usuario
WHERE 1
	AND ug.dt_bloqueio = '0000-00-00 00:00:00'
	AND tu.id = 102 # meu id
GROUP BY id_pagina
ORDER BY
	v.item_pai ASC,
	v.posicao_menu ASC

Desde já, muito obrigado pessoal.

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.