Ir para conteúdo

POWERED BY:

Arquivado

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

Tayron Miranda

[Resolvido] Buscar dados em uma tabela que não tenha referência c

Recommended Posts

:P Olá à todos....

 

Quero selecionar todas as pessoas do meu sistema que não tem login e senha.

 

Tenho duas tabelas

 

- Pessoa

PK - idpessoa

nme_pessoa

 

- Usuario

PK - idusuario

FK - idpessoa

nme_usuario (o nome de usuário é criptografado)

sen_senha (a senha do usuário é criptografado)

 

LEGENDA (PK -> chave primária, FK-> Chave estrangeira)

 

Eu quero selecionar todas as pessoas que não estão cadastradas na tabela usuário, porém não posso alterar meu sql, fazer inner-join ou até mesmo criar uma flag na tabela pessoa pra dizer se ela é um usuário ou não.. tenho que fazer isso via programação php, somente php...

 

Estou fazendo isso usando POO e MVC, dai tenho dois mátodos que pretendo usar pra resolver isso.. que é buscarPorId() 'busca o dado que tenha certa id' e buscarTodos() 'busca todos os registros do banco de dados';

 

Ou seja, tenho que trabalhar em cima dos arrays de dados que esses métodos me retornam.

 

Alguém tem uma idéia de como posso fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq 'só com php' ?

 

vai ser a forma mais difícil.

 

crie um array para cada tabela.

Depois compare os 2 arrays.

 

A diferença entre esses arrays, será oque está numa tabela e não está em outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu preciso que seja só em php, por que não posso ficar criando sqls ou flags no banco pra qualquer coisa, principalmente se tiver jeito de resolver via programação, pois isso não vai ser algo que vou fazer em vários lugar no meu sistema, é apenas um caso isolado...

 

Agora willian, sobre comparar arrays... eu posso fazer o seguinte;

Selecionar todos os registros de cada tabela, ou seja;

Da tabela Pessoa, vou ter um array contendo vários arrays com os dados, e da tabela Usuario a mesma coisa.

 

Neste momento de criatividade 0 da minha parte, teria como você dar um exemplo de como fazer esse tipo de comparação, pois já tinha pensado em comparar os arrays só não sei como fazer isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

pergunta pro google de array functions que tu acha uma funcao que faz isso....

 

ou pelo SQL você pode usar o NOT EXISTS, sem precisar criar nada a mais na base.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu preciso que seja só em php, por que não posso ficar criando sqls ou flags no banco pra qualquer coisa, principalmente se tiver jeito de resolver via programação,

 

nesse caso, não é bem 'qq coisa', e é bem mais rápido fazer direto no banco...

 

contruindo uma query, e mandando o php executar uma unica vez.

da outra forma, fazendo só com php você faz:

2 querys

2 loops

1 comparação (sendo q tem mais um loop no meio dessa comparação)

 

enqnto, se fizesse com SQL, poderia fazer apenas:

1 query

1 loop

 

^_^, e ai, oque é 'pior'?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vamos lá.. essa comparação, eu vou fazer em apenas uma tela da minha aplicação, utilizo programação em POO+MVC e não justifica eu criar um método somente pra isso, já que ele nunca vai ser reaproveitado... é mais fácil eu criar uma classe de comparação de array e economizar algumas linhas de códigos..

 

O sistema que estou fazendo, vai sofrer várias modificações futuramente e quando menos métodos eu usar pra mim é melhor...

 

Vou criar uma classe genérica de comparação de array em php pra resolver esse problema, isso caso eu não ache uma que já faça isso na web.. e vou postar aqui a solução que arrumei.. Assim terei esse trabalho uma vez só na minha vida :P

 

Mas se alguém animar criar uma classe pra fazer isso.. poste aqui.. acho que deveria ter criado esse tópico na parte de desafio... seria interessante ver o método que cara um usaria pra comparar arrays e retornar somente os dados desejados.. ='^.^=

Compartilhar este post


Link para o post
Compartilhar em outros sites

:P Tá tudo bem.. nada de fazer classes, após esfriar a cabeça um cadim, usar como inspiração a hora de aumoço que está quase chegando ... bastou apenas usar dois for e dois ifs para resolver o problema... ='^.^=

 

Com isso consigo listar todas as pessoas que são de contato de uma empresa e que ainda não tem usuário e senha pra acessar meu sistema.

 

Com isso o problema foi resolvido, eis a solução:

 

                                  <select name="idcontato" id="idcontato">
                                      <optgroup label="Selecione o cliente"></optgroup>
                                      <?php
                                            for($a=0; $a<$dado['contador_contato']; $a++){
                                                
                                                $objContato                     = $objContatos[$a];
                                                $_POST['idcontato']             = $objContato->__get('idcontato');
                                                $_POST['idpessoa']              = $objContato->__get('pessoa_idpessoa');
                                                $_POST['idcadastro']            = $objContato->__get('cadastro_idcadastro');

                                                /*
                                                 * Pego a id da empresa no cadastro
                                                 */

                                                $objCadastro                    = new ControleCadastro();
                                                $objCadastro                    = $objCadastro->buscarPorId($_POST);
                                                $_POST['idempresa']             = $objCadastro->__get('empresa_idempresa');

                                                /*
                                                 * Pego o nome fantasia da empresa usando sua id
                                                 */

                                                $objEmpresa                     = new ControleEmpresa();
                                                $objEmpresa                     = $objEmpresa->buscarPorId($_POST);
                                                $dado['nme_fantasia']           = $objEmpresa->__get('nme_fantasia');

                                                /*
                                                 * Descubro o nome da pessoa
                                                 */

                                                $objPessoa                      = new ControlePessoa();
                                                $objPessoa                      = $objPessoa->buscarPorId($_POST);
                                                $dado['nme_pessoa']             = $objPessoa->__get('nme_pessoa');

                                                /*
                                                 * Listo todos os usuarios
                                                 */

                                                $objUsuario                     = new ControleUsuario();
                                                $objUsuarios                    = $objUsuario->buscarTodos();
                                                $dado['contUsuario']            = count($objUsuarios);

                                                /*
                                                 * Faco um for verificando se existe um usuario para o nome, caso exista
                                                 * adiciono +1 na veriavel $existe
                                                 */

                                                $existe = 0;
                                                for($b=0; $b<$dado['contUsuario']; $b++){
                                                    $objUsuario = $objUsuarios[$b];

                                                    $existe = ($_POST['idpessoa'] == $objUsuario->__get('pessoa_idpessoa'))?$existe+1:$existe;

                                                }

                                                /*
                                                 * Se $existe for maior que um, significa que existe um usuario ja cadastrado
                                                 * Caso o valor de $existe for igual a 0, eu mostro o nome da pessoa para poder
                                                 * ser selecionado.
                                                 */

                                                if($existe==0){
                                      ?>
                                                <option value="<?= $_POST['idcontato'];?>"><?= $dado['nme_pessoa'] .' => '.$dado['nme_fantasia'];?></option>
                                      <?php
                                                }
                                            }
                                      ?>
                                  </select>

Para aqueles que não entendeu, a lógica ta neste trecho do código, onde eu vejo e somo quantas vezes a id daquela pessoa se encontra na tabela usuario, mesmo sabendo que só pode ter um... eu armazeno esse valor na variável $exite, dai ela só vai receber 0 ou 1.. com isso.. 0=> false e 1=> true

 

                                                $existe = 0;
                                                for($b=0; $b<$dado['contUsuario']; $b++){
                                                    $objUsuario = $objUsuarios[$b];

                                                    $existe = ($_POST['idpessoa'] == $objUsuario->__get('pessoa_idpessoa'))?$existe+1:$existe;

                                                }

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.