Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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?
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++;
}
?>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.
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!