AprendIz_ 0 Denunciar post Postado Maio 31, 2007 Olá Pessoal, Tenho um arquivo que lista produtos em uma tabela. O que gostaria de fazer é pegar o valor ID de cada produto e verificar se ela existe em outra tabela e caso exista mostre um echo com uma Mensagem de registro existente. Vou mostrar como montei o meu código. Assim ele está apenas mostrando os produtos: <?$host = "localhost"; $bd = "produtos"; $usuario = "root"; $senha = "senha"; $conexao = mysql_connect($host, $usuario, $senha); $banco = mysql_select_db($bd); $consulta= mysql_query("select * from produtos order by produtos_id");while($m_produto = mysql_fetch_array($consulta)){echo 'ID do Produto:'.$m_produto['produtos_id'];echo "<br>";}?>O resultado está ficando assim:ID do Produto:1 ID do Produto:2 ID do Produto:3 ID do Produto:4 ID do Produto:5 ID do Produto:6 ID do Produto:7 ID do Produto:8 ID do Produto:9 ------ O que quero fazer é por exemplo, pegar a id 1 e caso o valor 1 exista em uma outra tabela, ele exiba o resultado "produto comprado". Mas que ele exiba esta mensagem somente se a ID também existir em outra tabela. Tenho uma tabela comprados e nesta tabela somente se o produto for comprado ele aparece lá. As ids dos produtos comprados são as mesmas da tabela produtos que é a que estou exibindo estes resultados. Sei que tenho que fazer um select na tabela comprados e um IF. para exibir a mensagem. Mas não consigo montar um IF que verifique se o valor da ID que está sendo exibida, exista na outra tabela. Alguém sabe como fazer? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
AprendIz_ 0 Denunciar post Postado Maio 31, 2007 Olá.Fiz assim:Ele não exibe nada, porque acho que fiz o IF errado e não está verificando se o valor existe: <?$host = "localhost"; $bd = "produtos"; $usuario = "root"; $senha = "senha"; $conexao = mysql_connect($host, $usuario, $senha); $banco = mysql_select_db($bd); $consulta = mysql_query("select * from produtos order by produtos_id");$consulta2 = mysql_query("select * from produtos_comprados order by comprados_id");while($m_produto = mysql_fetch_array($consulta)){echo 'ID do Produto:'.$m_produto['produtos_id'];echo "<br>";while($m_compra = mysql_fetch_array($consulta2)){if($m_produto['produtos_id'] == $m_compra['comprados_id']){ echo "Produto Vendido";} } }?> Meu código está assim mas não está funcionando.Ele apenas exibe os registros, mas não faz a comparação.O que há de errado? Compartilhar este post Link para o post Compartilhar em outros sites
Diorges Rocha 0 Denunciar post Postado Maio 31, 2007 bom, não intendi muito bem mas tenta assim: <?$host = "localhost";$bd = "produtos";$usuario = "root";$senha = "senha";$conexao = mysql_connect($host, $usuario, $senha);$banco = mysql_select_db($bd);$consulta = mysql_query("select * from produtos order by produtos_id");while($m_produto = mysql_fetch_array($consulta)){echo 'ID do Produto:'.$m_produto['produtos_id'];$consulta = mysql_query("select * from produtos_comprados WHERE comprados_id = '".$m_produto['produtos_id']."'");if(mysql_num_rows($consulta)){echo " Produto Comprado";echo "<br />";}}?> Compartilhar este post Link para o post Compartilhar em outros sites
AprendIz_ 0 Denunciar post Postado Maio 31, 2007 Fiz o que falou,ele está exibindo apenas o primeiro registro da tabela produtos.Está acontecendo isto como resultado:ID do Produto:1 Compartilhar este post Link para o post Compartilhar em outros sites
Diorges Rocha 0 Denunciar post Postado Maio 31, 2007 Estranho, mas muda pra esse, mudei só algumas coisas... while($m_produto = mysql_fetch_array($consulta)){ echo 'ID do Produto:'.$m_produto['produtos_id']; $sql = mysql_query("SELECT * FROM produtos_comprados WHERE comprados_id='".$m_produto['produtos_id']."'"); if(mysql_num_rows($sql) == 1) { echo ' Produto Comprado'; echo '<br />;'; }} Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Maio 31, 2007 Há uma maneira mais fácil, que faz apenas uma consuta ao banco. :D Dá para usar Left Join. Veja o que o Manual "diz": Se não houver registros coincidentes para a tabela a direita da parte ON ou USING em um LEFT JOIN, uma linha com NULL atribuído a todas as colunas é usada para a tabela a direita. Você pode usar este fato para encontrar registro em uma tabela que não houver contrapartes em outra tabelaFonte: http://dev.mysql.com/doc/refman/4.1/pt/join.html Execute esta consulta: SELECT p. * , c. * FROM produtos p LEFT JOIN comprados c ON p.id = c.id_produto Quando o id do produto na tabela produtos não existir no campo id_produto da tabela comprados, id_produtos ficará com o valor NULL. Então basta fazer a verificação com IF, testando se o campo está vazio ou não. Se estiver, o produto não foi comprado. ;) Abraços, Beraldo Compartilhar este post Link para o post Compartilhar em outros sites
AprendIz_ 0 Denunciar post Postado Maio 31, 2007 Olá Diorges, mudei para aquele jeito mas aconteceu a mesma coisa.Beraldo, não entendi corretamente o funcionamento disso:SELECT p. * , c. *FROM produtos pLEFT JOIN comprados c ON p.id = c.id_produtoeste c.id_produto é o id da tabela comprados certo?em relação ao IF que verifica se o campo está vazio, como monto isso?Pois tenho que verificar se o valor de produtos_id da tabela produtos existe em algum campo produtos_id da tabela compradosComo posso montar isso no if?Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Maio 31, 2007 id_produto, nesse caso, é o id do produto que fica aarmazenado na tabela "comprados". Por exemplo: imagine que a variável $sql tenha a consulta que postei anteriormente. Veja o código: $query = mysql_query($sql); while ($f = mysql_fetch_object($query)) { if ($f->id_produto != NULL)//se o campo não for nulo, o produto já foi comprado { echo $f->nome_produto . " => Comprado<br />"; } else//o produto não foi comprado { echo $f->nome_produto . "<br />"; } } Deu para sacar? ;) Abraços, Beraldo Compartilhar este post Link para o post Compartilhar em outros sites