Ir para conteúdo

Arquivado

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

Palexandre

Dúvida consulta duplicada em sql

Recommended Posts

Boa noite pessoal, estou tentando mostrar os dados de duas tabelas em PH, porém a consulta traz os resultados duplicados conforme abaixo:

SELECT DISTINCT * FROM `tb_cliente` INNER JOIN `tb_animal`
cpf nome dt_nascimento rg email telefone celular profissao nacionalidade sexo registro data_entrada data_saida registro nome_cavalo sexo_cavalo tipo proprietario cabanha 25365841028 teste 14/10/1996 5048754495 teste@terra.com.br 65231478 85478506 testador de software Brasil M 896523/D 10/11/2016 654982/D Aurora F Puro Teste2 605 39548952014 Teste2 25/03/1975 7048129952 teste2@hotmail.com 85428631 72854590 analista de testes Inglaterra F 654982/D 24/11/2016 654982/D Aurora F Puro Teste2 605 25365841028 teste 14/10/1996 5048754495 teste@terra.com.br 65231478 85478506 testador de software Brasil M 896523/D 10/11/2016 896523/D Trovao M Puro teste 203 39548952014 Teste2 25/03/1975 7048129952 teste2@hotmail.com 85428631 72854590 analista de testes Inglaterra F 654982/D 24/11/2016 896523/D Trovao M Puro teste 203
Podem me ajudar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

Parece não haver um relacionamento correto entre suas tabelas, elas são bem confusas para mim. Mas pelo que percebi, os campos nome e proprietario é que se relacionam... se eu estiver certo disso, seu SQL deveria ser assim;

SELECT DISTINCT * FROM `tb_cliente` INNER JOIN `tb_animal` WHERE `tb_cliente.nome` = `tb_animal.proprietario`

Desta forma, o JOIN irá juntar os dados do cliente teste com o cavalo que pertence ao proprietário teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá aoliveira178,

Obrigado pelo retorno, desculpe minha tabela ser um pouco desorganizada, estou começando a estudar o conteúdo então comecei a colocar em prática.

Assim, com os ajustes que você fez no sql retornou o erro abaixo:

SELECT DISTINCT * FROM `tb_cliente` INNER JOIN `tb_animal` ON `tb_cliente.nome` = `tb_animal.proprietario` LIMIT 0, 25

Mensagens do MySQL : dot.gif

#1054 - Unknown column 'tb_cliente.nome' in 'on clause'

O relacionamento que tentei criar entre as duas tabelas foi o campo registro que é chave primária na tabela animal e estrangeira na tabela cliente.

Estou utilizando o XAMPP este possui o DB Maria, aí não sei se influência na hora de execução de algum comando sql..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver a duplicidade com o seguinte comando:

$sql = mysql_query(" SELECT DISTINCT`tb_cliente`.*,`tb_animal`.* FROM `tb_cliente` INNER JOIN `tb_animal` ON `tb_cliente`.`registro`=`tb_animal`.`registro`");

Porém fiquei com outro problema, eu fiz o comando acima para listar os clientes ( teste e teste2) cadastrados, após se eu clicar no nome de algum cliente ( teste2) ele deveria carregar os dados em uma outra pagina , e ele até faz isso, porém se eu clicar em outro cliente ( teste) ele me traz sempre a mesma informação do cliente anterior ( teste2) .

vou postar o código da lista e da pagina de consulta:

Essa é a parte que cria a lista:

<?php

// Selecionando os clientes do banco de dados
//$sql = mysql_query("SELECT DISTINCT * FROM tb_cliente");

$sql = mysql_query(" SELECT DISTINCT`tb_cliente`.*,`tb_animal`.* FROM `tb_cliente` INNER JOIN `tb_animal` ON `tb_cliente`.`registro`=`tb_animal`.`registro`");

//Exibindo clientes
echo "<ul>";
while($cliente = mysql_fetch_object($sql)){
echo "<li><a href='cliente.php?registro=".$cliente->registro."'>".$cliente->nome."</a></li>";

}
echo "</ul>";


?>
<br />
<a href='index.php'>Voltar</a>
</body>
</html>

E essa é a parte que traz as informações em tela:

<?php
// Recuperando informações do cliente do banco de dados
//$sql = mysql_query("SELECT * FROM tb_cliente WHERE cpf = '".$cpf."'");
$sql = mysql_query(" SELECT DISTINCT`tb_cliente`.*,`tb_animal`.* FROM `tb_cliente` INNER JOIN `tb_animal` ON `tb_cliente`.`registro`=`tb_animal`.`registro`");

// $sql = mysql_query(" SELECT DISTINCT * FROM tb_cliente inner join tb_animal ");


// Armazenando informações do cliente
$cliente = mysql_fetch_object($sql);


?>

<form method="POST" action="cliente.php?cpf=<?php echo $cpf ?>&acao=editar">
<fieldset>
<legend ><b>Informacoes do Hospede</b></legend>
<table>
<td><p><strong>Nome:</strong><br /><input name="nome" type="text" maxlength="300" style="width: 300%;" value="<?php echo $cliente->nome ?>" /></p></td><tr></tr>
<td><p><strong>RG:</strong><br /><input name="rg" type="text" value="<?php echo $cliente->rg ?>" /></p></td>
<td><p><strong>Email:</strong><br /><input name="email" type="text" style="width: 197%;" value="<?php echo $cliente->email ?>" /></p></td><tr></tr>
<td><p><strong>Telefone:</strong><br /><input name="telefone" type="text" value="<?php echo $cliente->telefone ?>" /></p></td>
<td><p><strong>Celular:</strong><br /><input name="celular" type="text" value="<?php echo $cliente->celular ?>" /></p></td>
<td><p><strong>Data de nascimento:</strong><br /><input name="dt_nascimento" type="text" value="<?php echo $cliente->dt_nascimento ?>" /></p></td><tr></tr>
<td><p><strong>Sexo:</strong><br /><input name="sexo" type="text" style="width: 24%;" value="<?php echo $cliente->sexo ?>" /></p></td>
<td><p><strong>Profissao:</strong><br /><input name="profissao" type="text" value="<?php echo $cliente->profissao ?>" /></p></td>
<td><p><strong>Nacionalidade:</strong><br /><input name="nacionalidade" type="text" value="<?php echo $cliente->nacionalidade ?>" /></p></td><tr></tr>
<td><p><strong>Data de Entrada:</strong><br /><input name="data_entrada" type="text" value="<?php echo $cliente->data_entrada ?>" /></p>
<td><p><strong>Nome do animal:</strong><br /><input name="nome_cavalo" type="text" value="<?php echo $cliente->nome_cavalo ?>" /></p>
<td><p><strong>Cabanha:</strong><br /><input name="cabanha" type="text" value="<?php echo $cliente->cabanha ?>" /></p>
</table>
</fieldset>
<input type="submit" value="Editar Cliente" />
<input type="button" value="Remover Cliente" onclick="confirmar('<?php echo $cpf ?>')" />
<input type="button" value="Voltar" onClick="javascript: location.href='index7.php';" />

</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se alguém puder me ajudar para saber onde estou errando ficarei agradecido !!

Mudei a forma de pesquisa, tipo coloquei para pesquisar por nome, porém duplica o resultado conforme imagem abaixo:

Segue o código e o resultado da pesquisa duplicada abaixo:

// palavra que o usuario digitou

if( $a == "pesquisar"){
$palavra = trim($_POST['palavra']);

//faz a busca com as palavras enviadas .
$sql = mysql_query("SELECT DISTINCT * FROM tb_cliente,tb_animal WHERE nome LIKE '%".$palavra."%' ")or die(mysql_error());


// total de registros encontrados
$numRegistros = mysql_num_rows($sql);

// Se houver pelo menos um registro, exibe-o

if ($numRegistros != 0) {

// Exibe os registros encontrados
while ($dados = mysql_fetch_object($sql)) {
echo "<td>Nome: $dados->nome</td><tr>" . "<br />";
echo "<td>Sexo: $dados->sexo</td><tr>" . "<br />";
echo "<td>Profissao: $dados->profissao</td><tr>" . "<br />";
echo "<td>Nacionalidade: $dados->nacionalidade</td>" . "<br />";
echo "<td>Cabanha: $dados->cabanha</td>" . "<br />";
echo "<td>Nome do cavalo: $dados->nome_cavalo</td>" . "<br />";


}
}

Nome: Fulano
Sexo: M
Profissao: Veterinario
Nacionalidade: Brasil
Cabanha: 605
Nome do cavalo: Aurora
Nome: Fulano
Sexo: M
Profissao: Veterinario
Nacionalidade: Brasil
Cabanha: 404
Nome do cavalo: Gasparito
Nome: Fulano
Sexo: M
Profissao: Veterinario
Nacionalidade: Brasil
Cabanha: 203
Nome do cavalo: Trovao

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema de ficar duplicado é por causa da sua consulta:




$sql = mysql_query("SELECT DISTINCT * FROM tb_cliente,tb_animal WHERE nome LIKE '%".$palavra."%' ")or die(mysql_error());



Por via de regra, sempre que você fizer um JOIN você tem que informar a coluna que referencia a outra tabela, ou então os dados vão se repetir inúmeras vezes (por isso o seu está duplicado). No seu caso você não utilizou a cláusula JOIN, mas recomendo que a utilize pois é mais fácil de entender, principalmente quando tiver váris tabelas na consulta. Tente assim:




$sql = mysql_query("
SELECT DISTINCT
c.nome, c.sexo, c.profissao, c.nacionalidade,
a.cabanha, a.cavalo
FROM tb_cliente as c
INNER JOIN tb_animal as a ON a.registro = c.registro
WHERE c.nome LIKE '%".$palavra."%'
") or die(mysql_error());



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.