Ir para conteúdo

POWERED BY:

Arquivado

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

João Marcos Ferlini

Função INNER JOIN

Recommended Posts

Olá.

 

Estou enfrentando dificuldades para colocar o INNER JOIN para funcionar...

 

Tenho duas tabelas ("dívidas" e "clientes").

 

Na tabela "dividas" tenho campo: idCliente (FK) e na tabela "clientes" tenho o campo: idCliente e nomeCliente (PK).

 

O INNER JOIN está assim:

$query = mysql_query("SELECT idCliente, nomeCliente, contrato, idDivida FROM dividas INNER JOIN clientes ON dividas.idCliente=clientes.nomeCliente ORDER BY idCliente ASC LIMIT $inicio, $quantidade");

Mas esta sintaxe está com erro:

 

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in line 56.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia companheiro!

 

Para solucionar o problema temos duas formas, a primeira é adicionando o prefixo antes do campo que vc quer selecionar, ficando assim:

SELECT dividas.idCliente, clientes.idCliente, nomeCliente, endCliente, testeCliente  FROM dividas INNER JOIN clientes ON dividas.idCliente=clientes.idCliente ORDER BY clientes.idCliente ASC LIMIT $limite, $quantidade

Repare que os dois idCliente utilizados estao com om prefixo da tabela q serão utilizados ao fazer o ON.

 

Outra forma é adicionando um table alias, ficando dessa forma:

SELECT d.idCliente, c.idCliente, nomeCliente, endCliente, testeCliente  FROM dividas d INNER JOIN clientes c ON d.idCliente=c.idCliente ORDER BY c.idCliente ASC LIMIT $limite, $quantidade

Repare que apelidamos dividas de "d" e clientes de "c" e ao fazer o FROM especificamos o nome da table dividas seguido do apelido que demos "d" e o INNER JOIN especificamos a table clientes seguido do apelido "c".

 

Vale ressaltar que a função mysql_ foi depreciada das versões mais novas do PHP e o PHP7 não dara mais suporte para a mesma, recomendo utilizar PDO ou algum ORM.

 

Espero ter ajudado, um abraço!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kaique, valew sua ajuda e a orientação para mudança para PDO.

 

Porém ainda persisti o erro...está na linha: while ($pesquisa = mysql_fetch_assoc($query)) { ?>

 

Vou colocar o código completo aqui:

$query = mysql_query("SELECT d.idCliente, c.idCliente, nomeCliente  FROM dividas d INNER JOIN clientes c ON d.idCliente=c.idCliente ORDER BY c.idCliente ASC LIMIT $limite, $quantidade");
					$i=0;
					while ($pesquisa = mysql_fetch_assoc($query)) { ?>

					<tr>
					    <td align="center" width="40"><?=$pesquisa['idDivida']?></td>
					    <td align="center" width="100"><?=$pesquisa['contrato']?></td>
					    <td width="300"><?=$pesquisa['idCliente']?></td>
					    <td align="center" width="200"><a href="cad-dividas.php?comando=ALT&idDivida=<?=$pesquisa['idDivida']?>">ALTERAR</a> | <a href="cad-dividas.php?comando=DEL&idDivida=<?=$pesquisa['idDivida']?>">EXCUIR</a></td>
					</tr>

					<?php $i++; } 

Consegue me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza...

Adicione um alias ao nome do cliente tbm, ficando assim:

SELECT d.idCliente, c.idCliente, c.nomeCliente  FROM dividas d INNER JOIN clientes c ON d.idCliente=c.idCliente ORDER BY c.idCliente ASC LIMIT {$limite}, {$quantidade}

Deve funcionar, fiz os teste aqui e rolou, segue o codigo inteiro, caso nao funcione, de uma olhada se não faltou algo:

 

$conecta = mysql_connect("localhost", "root", "190894") or print (mysql_error()); 


mysql_select_db("teste", $conecta) or print(mysql_error()); 


$limite = 0;
$quantidade = 10;


$query = "SELECT d.idCliente, c.idCliente, c.nomeCliente  FROM dividas d INNER JOIN clientes c ON d.idCliente=c.idCliente ORDER BY c.idCliente ASC LIMIT {$limite}, {$quantidade}";


$result = mysql_query($query, $conecta);


$i=0;
while ($pesquisa = mysql_fetch_assoc($result)) { ?>
    <tr>
        <td align="center" width="40"><?=$pesquisa['nomeCliente']?></td>
        <td align="center" width="100"><?=$pesquisa['nomeCliente']?></td>
        <td width="300"><?=$pesquisa['nomeCliente']?></td>
        <td align="center" width="200"><a href="cad-dividas.php?comando=ALT&idDivida=<?=$pesquisa['nomeCliente']?>">ALTERAR</a> | <a href="cad-dividas.php?comando=DEL&idDivida=<?=$pesquisa['nomeCliente']?>">EXCUIR</a></td>
    </tr>


<?php $i++; 
}


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

PS: Só para dizer o porque foi necessário adicionar esse alias... Veja que nas duas tabelas existem a coluna nomeCliente, o que causa uma ambiguidade no SQL. Sugiro que você utilize esse campo em apenas uma tabela, e já que esta fazendo o relacionamento pelo id do cliente você consegue obter esses dados de forma relacional.

 

Abraço.

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.