Ir para conteúdo

Arquivado

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

Marcello Ruoppolo

Seleção de Multiplas tabelas

Recommended Posts

E ai galera td bem?

 

Eu estou fazendo um sistema bem complexo e ja to programando a tantas horas seguidas q a cabeça ta dando pt, preciso de ajuda pra bolar um algoritmo pra uma função aqui, mas pra ficar mais fácil de entender eu preciso explicar um pouco do funcionamento do sistema.

 

É o seguinte existem 2 planos de assinatura um que vc pode escolher 15 estados brasileiros e outro que vc tem acesso a todos os estados brasileiros.

 

Este que você tem direito a 15 estado, vc que escolhe quais serão estes estados e vc precisa cadastrar todos os dados das empresas que deseja nesses estados.

 

O outro plano ja vem com todos os estados, empresas cadastradas e vc ainda pode cadastrar empresas, então eu fiz o seguinte, eu criei uma tabela no banco de dados onde tem todos os estados brasileiros chamei de 'tb_estados' e criei uma outra tabela que permite ao usuário escolher os estados onde salva a id do usuário e a id do estado que eu chamei de tb_estados_escolhido.

 

Eu tenho na tb_empresas os campos que me permitem estas filtragens que seria o campo com a id do estado, id do usuário que a cadastrou e um capo que eu chamei de strPublic que é do tipo enum que identifica se o dado é publico ou não.

 

No caso se ele for público ele será visível para todos os usuários que tiverem o plano que cobre o brasil inteiro, se ele não for publico só poderá ser visto pelo próprio usuário que o cadastrou.

 

Agora eu estou fazendo uma página que lista todas as empresas e ai no caso se o usuário for o que tem o plano maior com acesso a todos os estados ele deve buscar as empresas de todos os estados, as que foram cadastradas por ele e as previamente cadastradas pelo sistema.

 

Caso ele seja usuário que tem direito apenas 15 estados o sistema tem q procurar quais são os estados que ele escolheu na tb_estados_escolhidos e cruzar com informações da tb_empresas pegando apenas as empresas que tenham sido cadastradas por ele e sejam de um dos estados que ele escolheu.

 

Bom é isso, eu ja coloquei varios INNER JOINS e talz, mas ainda não to conseguindo retornar resultados, alguém tem ideia deste algoritmo, me da uma força ai por favor que depois desse eu vou dormir um pouco. kkkk

 

 

Valew galera abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites
  1. Identificar o plano do usuário logado
  2. Identificar quais estados pertencem a cada plano (imagino que exista uma ligação entre os estados e os planos)
  3. No JOIN você diz que o id do usuário logado é igual ao id do usuário que fez o cadastro da empresa OU o id do estado do plano é igual ao id do estado da empresa que o campo strPublic tiver valor publico.

Assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é quase isso na verdade, eu vo postar minha query aqui pra ver se ajuda:

if($_SESSION['user_plano'] != 2 && $_SESSION['user_plano'] != 6){
					    		$busca_estado = mysql_query("SELECT * FROM tb_estados_escolhidos WHERE intUserID = '$user'");
					    		while($estado = mysql_fetch_assoc($busca_estado)){
					    			$id_estado = $estado['intEstadoID'];
					        		$cmd = "SELECT o.intOrganizadorEventoID, o.strOrganizadorEventoNome, o.strOrganizadorEventoNomeContato, o.intCidadeID, o.intEstadoID, c.intCidadeID, c.strCidadeNome, e.intEstadoID, e.strEstadoUF FROM tb_organizadores_eventos AS o INNER JOIN tb_cidades AS c ON o.intCidadeID = c.intCidadeID INNER JOIN tb_estados AS e ON o.intEstadoID = e.intEstadoID WHERE intUserID = '$user' AND o.intEstadoID = '$id_estado'";
					        	}
					        }else{
					        	$cmd = "SELECT o.intOrganizadorEventoID, o.strOrganizadorEventoNome, o.strOrganizadorEventoNomeContato, o.intCidadeID, o.intEstadoID, c.intCidadeID, c.strCidadeNome, e.intEstadoID, e.strEstadoUF FROM tb_organizadores_eventos AS o INNER JOIN tb_cidades AS c ON o.intCidadeID = c.intCidadeID INNER JOIN tb_estados AS e ON o.intEstadoID = e.intEstadoID WHERE intUserID = '$user' OR strPublic = 's'";
					        }

Porém ta rolando o seguinte o meu usuário tem o Plano 3 assinado e ele cadastrou uma empresa e esta empresa tbm é pública no strPublic, porém, quando eu acesso a página ele fala q nenhum registro foi encontrado para este usuário, sendo que na verdade era pra ele encontrar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vish, embaralhou tudo, kkkk.

 

Dessa forma você faz uma consulta para cada uf, mas pela forma como foi feita essa sua query, é possível fazer numa única query.

 

Como é a estrutura das tabelas estados, cidades e tb_estados_escolhidos? O campo intUserID e strPublic estão na tabela tb_organizadores_eventos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

lokaodomau valew cara, eu consegui fazer depois, tipo assim, eu fiz o seguinte:

 

Criei um campo na tabela com um campo enum que mostrava se o usuário tinha acesso ao banco de dados ou não ai só fiz uma query q se ele tivesse acesso ao banco ele puxaria todos os dados cadastros por ele e os dados publicos se ele não tivesse somente os dados cadastrados por ele.

 

Fico assim:

<?php

if($_SESSION['user_banco'] == 's'){
					        	$cmd = "SELECT o.intOrganizadorEventoID, o.strOrganizadorEventoNome, o.strPublic, o.intOrganizadoresCategoriaID, o.intEstadoID, o.intCidadeID, c.intOrganizadoresCategoriaID, c.strOrganizadoresCategoriaNome, e.intEstadoID, e.strEstadoUF, m.intCidadeID, m.strCidadeNome FROM tb_organizadores_eventos AS o INNER JOIN tb_organizadores_categorias AS c ON o.intOrganizadoresCategoriaID = c.intOrganizadoresCategoriaID INNER JOIN tb_estados AS e ON o.intEstadoID = e.intEstadoID INNER JOIN tb_cidades AS m ON o.intCidadeID = m.intCidadeID WHERE o.intUserID = '$user' OR o.strPublic = 's'";
					        }else{
					    		$cmd = "SELECT o.intOrganizadorEventoID, o.strOrganizadorEventoNome, o.strPublic, o.intOrganizadoresCategoriaID, o.intEstadoID, o.intCidadeID, c.intOrganizadoresCategoriaID, c.strOrganizadoresCategoriaNome, e.intEstadoID, e.strEstadoUF, m.intCidadeID, m.strCidadeNome FROM tb_organizadores_eventos AS o INNER JOIN tb_organizadores_categorias AS c ON o.intOrganizadoresCategoriaID = c.intOrganizadoresCategoriaID INNER JOIN tb_estados AS e ON o.intEstadoID = e.intEstadoID INNER JOIN tb_cidades AS m ON o.intCidadeID = m.intCidadeID WHERE o.intUserID = '$user'";
					        } 
					       
					        $produtos = mysql_query($cmd) or die(mysql_error());

?>

Era a cabeça q ja tava locona ja, kkkkk

 

Valew cara

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tem dois tipos de planos, resolver esse problema é bem simples e não precisa dessas querys pesadas.

Verifique o plano do usuário logado, daí você faz a consulta conforme o plano.

if ($_SESSION['plano'] === 1)
{
//consulta para plano um
}
else if ($_SESSION['plano'] === 2)
{
//consulta para plano 2
}

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.