PF2G Posted May 8, 2012 at 09:25 AM Report #453704 Posted May 8, 2012 at 09:25 AM Bom dia, P@P Eu estou a trabalhar num website onde tenho de procurar um produto e se encontrar aparece a listagem dos produto com aquele nome. As tabelas sao: PRODUTOS - id_produto, nome, referencia, id_material PRODUTOS_IMG - id_produto, imagem MATERIAIS - id_material, material A minha duvida é que atraves o id_produto tenho de ir buscar a imagem correspondente ao produto, e atraves do id_material tenho que ir buscar o material correspondente ao produto... Criei este SQL mas tou com alguns problemas: $sql_prod = "SELECT * FROM produtos WHERE nome LIKE '%".$prod."%' ORDER BY id_produto ASC"; $res=mysql_query($sql_prod, $futura); $count=mysql_num_rows($res); $sql_img = "SELECT id_produto, imagem FROM produtos_img"; $executa=mysql_query($sql_img, $futura); $sql_material = "SELECT id_material, material FROM materiais WHERE id_material=".$res['id_material']; $executa=mysql_query($sql_img, $futura); echo '<td colspan="2" class="div_topo"> PRODUTOS:: $material['material']'; //echo '<tr><td align="left"><img src="produtos/'.$line['imagem'].'"></td></tr>'; echo '<tr><td align="left"><strong>DESCRIÇÃO</strong>:'. $linha['nome']. '</td>'; echo '<td align="left"><strong>REFERÊNCIA</strong>:'. $linha['referencia']. '</td></tr>'; $i=$i+1; Alguem me pode ajudar? Obrigado, PF2G
AndreLC Posted May 8, 2012 at 09:35 AM Report #453706 Posted May 8, 2012 at 09:35 AM Bom dia, PF2G Penso que podes reduzir as 3 querys que tens com uma só, utilizando o INNER JOIN. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 09:54 AM Author Report #453711 Posted May 8, 2012 at 09:54 AM Bom dia, PF2G Penso que podes reduzir as 3 querys que tens com uma só, utilizando o INNER JOIN. Eu fiz o INNER JOIN: $sql_prod = "SELECT * FROM produtos WHERE nome LIKE '%".$prod."%' ORDER BY id_produto ASC"; $produt=mysql_query($sql_prod, $futura); $count=mysql_num_rows($produt); $pro_img="SELECT * FROM produtos INNER JOIN produtos_img ON produtos.id_produto = produtos_img.id_produto JOIN materiais ON produtos.id_material = materiais.id_material"; $image=mysql_query($pro_img, $futura); while ($linha = mysql_fetch_array($image)) { if ($i==0) { echo '<tr>'; } echo '<td colspan="2" class="div_topo"> PRODUTOS::'.$linha['material']; echo '<tr><td align="left"><img src="produtos/'.$linha['imagem'].'"></td></tr>'; echo '<tr><td align="left"><strong>DESCRIÇÃO</strong>:'. $linha['nome']. '</td>'; echo '<td align="left"><strong>REFERÊNCIA</strong>:'. $linha['referencia']. '</td></tr>'; E aparece-me a lista do produtos todos :S
AndreLC Posted May 8, 2012 at 10:07 AM Report #453715 Posted May 8, 2012 at 10:07 AM Falta a cláusula WHERE com a condição que queres... echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 10:09 AM Author Report #453716 Posted May 8, 2012 at 10:09 AM Falta a cláusula WHERE com a condição que queres... Esqueci-me de mencionar: $pro_img="SELECT * FROM produtos INNER JOIN produtos_img ON produtos.id_produto = produtos_img.id_produto JOIN materiais ON produtos.id_material = materiais.id_material WHERE produtos.nome LIKE '%".$prod."%'"; $image=mysql_query($pro_img, $futura)or die(mysql_error()); o problema é que quando faço o while (mysql_feth_array ($image)), eu faço a procura de um produto que só existe um resultado diz que so ha um mas aparece 3. Sabes pq?
AndreLC Posted May 8, 2012 at 10:20 AM Report #453720 Posted May 8, 2012 at 10:20 AM O que tens na variável $prod? Testa a query no phpMyAdmin para ver se aparece conforme esperado... echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 10:22 AM Author Report #453722 Posted May 8, 2012 at 10:22 AM O que tens na variável $prod? Testa a query no phpMyAdmin para ver se aparece conforme esperado... o $prod é o que escreves na caixa de texto de procura...
PF2G Posted May 8, 2012 at 10:45 AM Author Report #453732 Posted May 8, 2012 at 10:45 AM $prod=$_GET['q2']; //caixa de texto pesquisa $pro_img="SELECT produtos.*, produtos_img.*, materiais.* FROM (produtos INNER JOIN produtos_img ON produtos.id_produto = produtos_img.id_produto) INNER JOIN materiais ON produtos.id_material = materiais.id_material WHERE produtos.nome LIKE '%". $prod ."%'"; $produt=mysql_query($pro_img, $futura); $count=mysql_num_rows($produt); <table width="570" border="0" cellspacing="0" cellpadding="0"> <?PHP $i=0; while ($linha = mysql_fetch_array($produt)) { if ($i==0) { echo '<tr>'; } echo '<td colspan="2" class="div_topo"> PRODUTOS::'.$linha['material']; echo '<tr><td align="left"><img src="'.$linha['imagem'].'"></td></tr>'; echo '<tr><td align="left"><strong>DESCRIÇÃO</strong>:'. $linha['nome']. '</td>'; echo '<td align="left"><strong>REFERÊNCIA</strong>:'. $linha['referencia']. '</td></tr>'; $i=$i+1; } ?> </table> Agora já está quase, só ha dois problemas: nao me aparecem as imagens e tá-me a multiplicar as vezes que existe.
AndreLC Posted May 8, 2012 at 10:58 AM Report #453739 Posted May 8, 2012 at 10:58 AM Verificaste utilizando o phpMyAdmin se a query está correcta a retornar os resultados que queres? echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 11:00 AM Author Report #453741 Posted May 8, 2012 at 11:00 AM Verificaste utilizando o phpMyAdmin se a query está correcta a retornar os resultados que queres? esta correta sim
AndreLC Posted May 8, 2012 at 11:23 AM Report #453757 Posted May 8, 2012 at 11:23 AM $prod=$_GET['q2']; //caixa de texto pesquisa $pro_img="SELECT produtos.*, produtos_img.*, materiais.* FROM (produtos INNER JOIN produtos_img ON produtos.id_produto = produtos_img.id_produto) INNER JOIN materiais ON produtos.id_material = materiais.id_material WHERE produtos.nome LIKE '%". $prod ."%'"; $produt=mysql_query($pro_img, $futura); $count=mysql_num_rows($produt); <table width="570" border="0" cellspacing="0" cellpadding="0"> <?PHP $i=0; while ($linha = mysql_fetch_array($produt)) { if ($i==0) { echo '<tr>'; } echo '<td colspan="2" class="div_topo"> PRODUTOS::'.$linha['material']; echo '<tr><td align="left"><img src="'.$linha['imagem'].'"></td></tr>'; echo '<tr><td align="left"><strong>DESCRIÇÃO</strong>:'. $linha['nome']. '</td>'; echo '<td align="left"><strong>REFERÊNCIA</strong>:'. $linha['referencia']. '</td></tr>'; $i=$i+1; } ?> </table> Agora já está quase, só ha dois problemas: nao me aparecem as imagens e tá-me a multiplicar as vezes que existe. Provavelmente só estás a gravar o nome da imagem, correcto? Falta-te o caminho para a imagem. As imagens não estão numa pasta? Tens que indicar no atributo src da imagem o caminho para a pasta das imagens. echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 11:37 AM Author Report #453763 Posted May 8, 2012 at 11:37 AM Provavelmente só estás a gravar o nome da imagem, correcto? Falta-te o caminho para a imagem. As imagens não estão numa pasta? Tens que indicar no atributo src da imagem o caminho para a pasta das imagens. Ja pus e nao funciona na mesma. Outra coisa sabes como posso resolver o problema de ele multiplicar o numero de resultados?
AndreLC Posted May 8, 2012 at 12:54 PM Report #453784 Posted May 8, 2012 at 12:54 PM Foi adaptado à pressa, mas tenta algo como: <table width="570" border="0" cellspacing="0" cellpadding="0"> <?php $por_pag = 5; //max resultados por página $prod=$_GET['q2']; //caixa de texto pesquisa | Se é caixa de texto e não estás a obter dados a partir da url podias optar por usar POST em vez de GET... $pro_img="SELECT produtos.*, produtos_img.*, materiais.* FROM (produtos INNER JOIN produtos_img ON produtos.id_produto = produtos_img.id_produto) INNER JOIN materiais ON produtos.id_material = materiais.id_material WHERE produtos.nome LIKE '%". $prod ."%'"; $produt=mysql_query($pro_img, $futura); $count=mysql_num_rows($produt); if ($count == 0){ echo "<p>Não foram encontrados resultados</p>"; }else{ $contador=0; while($linha = mysql_fetch_array($produt)){ $contador++; if($contador>$por_pag)break; echo '<tr><td colspan="2" class="div_topo"> PRODUTOS::'.$linha['material']; echo '<tr><td align="left"><img src="'.$linha['imagem'].'"></td></tr>'; echo '<tr><td align="left"><strong>DESCRIÇÃO</strong>:'. $linha['nome']. '</td>'; echo '<td align="left"><strong>REFERÊNCIA</strong>:'. $linha['referencia']. '</td></tr>'; } } ?> </table> echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 01:12 PM Author Report #453792 Posted May 8, 2012 at 01:12 PM AndreLC eu ja experimento a tua hipotese deixa-me so testar esta, mas preciso da tua ajuda, pq tou a fazer alguma coisa mal e nao estou a ver :S <table width="570" border="0" cellspacing="0" cellpadding="0"> <?PHP $i=0; while ($linha = mysql_fetch_array($image)) { if ($i==0) { echo '<tr>'; } $sel_mat="SELECT * FROM materiais WHERE id_material = '".$linha['id_material']."'"; $mat=mysql_query($sel_mat, $futura); echo '<td colspan="2" class="div_topo"> PRODUTOS:: '.$mat['material']; $sel_img="SELECT * FROM produtos_img WHERE id_produto = '".$linha['id_produto']."'"; $img=mysql_query($sel_img, $futura); echo '<tr><td align="left"><img src=">'.$img['imagem'].'"/></td></tr>'; echo '<tr><td align="left"><strong>DESCRIÇÃO</strong>:'. $linha['nome']. '</td>'; echo '<td align="left"><strong>REFERÊNCIA</strong>:'. $linha['referencia']. '</td></tr>'; $i=$i+1; } ?> </table> Podes-me ajudar? Obrigado, PF2G
AndreLC Posted May 8, 2012 at 01:36 PM Report #453804 Posted May 8, 2012 at 01:36 PM Um aspecto que salta logo à vista é o facto de estares a enviar a consulta, mas não estás a obter a linha com os resultados... Por exemplo, $linha = mysql_fetch_array($mat); No primeiro aspecto estás a utilizar a $mat e tem que ser $linha, por exemplo! echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 01:37 PM Author Report #453805 Posted May 8, 2012 at 01:37 PM Entao o que é que me falta? eu sempre fiz dessa maneira...
AndreLC Posted May 8, 2012 at 01:47 PM Report #453809 Posted May 8, 2012 at 01:47 PM Experimentaste a minha hipótese? echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
PF2G Posted May 8, 2012 at 01:55 PM Author Report #453813 Posted May 8, 2012 at 01:55 PM Experimentaste a minha hipótese? Ya acontece o que me acontecia multiplica-me os resultados e a imagem nada... Estou agora a experimentar outra, so me falta a imagem: <?php require_once('Connections/futura.php'); ?> <?PHP $prod=$_GET['q2']; $query_prod="SELECT * FROM produtos WHERE nome LIKE '%".$prod."%'"; $produt=mysql_query($query_prod, $futura); $count=mysql_num_rows($produt); $prod_img="SELECT * FROM produtos WHERE nome LIKE '%". $prod ."%'"; $image=mysql_query($prod_img, $futura); $query_categ_list = "SELECT * FROM materiais ORDER BY ordem ASC"; $categ_list = mysql_query($query_categ_list, $futura) or die(mysql_error()); $row_categ_list = mysql_fetch_assoc($categ_list); $totalRows_categ_list = mysql_num_rows($categ_list); ?> <!-----------------------------------------------------------------------------------------------------------------------> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="styles/style.css" rel="stylesheet" /> <title>Plásticos Futura - Pesquisa</title> <link rel="shortcut icon" type="image/x-icon" href="imagens/plasticos.ico" /> <script type="text/javascript" src="js/java.js"></script> </head> <body> <table width="1200" border="0" align="center" cellpadding="0" cellspacing="0" style="background-image:url(imagens/fundo5.jpg);background-repeat:repeat-y;"> <tr> <td> <table width="1200" border="0" align="center" cellpadding="0" cellspacing="0" style="background-image:url(imagens/fundo3.jpg); background-repeat:no-repeat;" height="713" > <tr> <td height="60" valign="bottom"><?php include("topo.php"); ?></td> </tr> <tr> <td height="613" valign="top"><table width="1200" border="0" cellspacing="0" cellpadding="0"> <tr> <td valign="top"><table width="260" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="right"><a href="index.php" title="Voltar à homepage"><img src="imagens/plasticos-futura.png" border="0" /></a></td> </tr> <tr> <td height="40"></td> </tr> <tr> <td><table width="250" border="0" align="right" cellpadding="0" cellspacing="0"> <tr> <td width="30"></td> <td height="26" class="menu" onclick="window.location='index.php'"><a href="index.php" title="Home - Plásticos Futura" class="menu_text">Home</a></td> </tr> <tr> <td height="2"></td> <td height="2"></td> </tr> <tr> <td width="30"></td> <td height="26" class="menu" onclick="window.location='empresa.php'"><a href="empresa.php" class="menu_text" title="Empresa - Plásticos Futura">Empresa</a></td> </tr> <tr> <td height="2"></td> <td height="2"></td> </tr> <tr> <td width="30"></td> <td height="26" class="menu" onclick="window.location='produtos.php'"><a href="produtos.php" class="menu_text" title="Produtos - Plásticos Futura">Produtos</a></td> </tr> <tr> <td height="2"></td> <td height="2"></td> </tr> <tr> <td width="30"></td> <td height="26" class="menu" onclick="window.location='noticias.php'"><a href="noticias.php" class="menu_text" title="Notícias - Plásticos Futura">Notícias</a></td> </tr> <tr> <td height="2"></td> <td height="2"></td> </tr> <tr> <td width="30"></td> <td height="26" class="menu" onclick="window.location='oportunidades-de-negocio.php'"><a href="oportunidades-de-negocio.php" class="menu_text" title="Oportunidades de Negócio - Plásticos Futura">Oportun. Negócio</a></td> </tr> <tr> <td height="2"></td> <td height="2"></td> </tr> <tr> <td width="30"></td> <td height="26" class="menu" onclick="window.location='recrutamento.php'"><a href="recrutamento.php" class="menu_text" title="Recrutamento - Plásticos Futura">Recrutamento</a></td> </tr> <tr> <td height="2"></td> <td height="2"></td> </tr> <tr> <td width="30"></td> <td height="26" class="menu" onclick="window.location='contactos.php'"><a href="contactos.php" class="menu_text" title="Contactos - Plásticos Futura">Contactos</a></td> </tr> </table></td> </tr> </table></td> <!-----------------------------------------------------------------------------------------------------------------------> <td width="638" valign="top" class="texto_pretobig2"><div class="bomfundo"><strong>RESULTADOS DA PESQUISA::</strong><br /> <br/> <?PHP if($count==0) { ?> <strong>Não foram encontrados resultados!</strong> <?PHP } else { echo 'Encontrado(s) '.$count.' resultado(s) de pesquisa com a palavra "'. $prod .'":'; echo '<br/>'; ?> <table width="570" border="0" cellspacing="0" cellpadding="0"> <?PHP $i=0; while ($linha = mysql_fetch_array($image)) { if ($i==0) { echo '<tr>'; } //MATERIAL ?> <td colspan="2" class="div_topo"><a name="cat<?php echo $row_categ_list['id_material']; ?>"></a> <strong>PRODUTOS :: <span class="texto2"><?php echo $row_categ_list['material_en']; ?></span></strong></td> <?PHP //IMAGEM $sel_img="SELECT * FROM produtos_img WHERE id_produto = '".$linha['id_produto']."'"; $img=mysql_query($sel_img, $futura); echo '<tr><td align="left"><img src="produtos/'.$img['imagem'].'"/></td></tr>'; echo '<tr><td align="left"><strong>DESCRIÇÃO</strong>:'. $linha['nome']. '</td>'; echo '<td align="left"><strong>REFERÊNCIA</strong>:'. $linha['referencia']. '</td></tr>'; $i=$i+1; } ?> </table> <?PHP } ?> <!-----------------------------------------------------------------------------------------------------------------------> </div></td> <td width="178"></td> </tr> </table></td> </tr> <tr> <td height="40"><?php include("rodape.php"); ?></td> </tr> </table> </td> </tr> </table> </body> </html>
AndreLC Posted May 8, 2012 at 02:16 PM Report #453825 Posted May 8, 2012 at 02:16 PM Ao inicio tens duas querys iguais... Na parte de imagem falta obter as linhas com os resultados... //IMAGEM $sel_img="SELECT * FROM produtos_img WHERE id_produto = '".$linha['id_produto']."'"; $img=mysql_query($sel_img, $futura); $linha_img = mysql_fetch_array($img); //Acrescentei esta linha echo '<tr><td align="left"><img src="produtos/'.$linha_img['imagem'].'"/></td></tr>'; //Modifiquei aqui Um aspecto que salta logo à vista é o facto de estares a enviar a consulta, mas não estás a obter a linha com os resultados... Por exemplo, $linha = mysql_fetch_array($mat); No primeiro aspecto estás a utilizar a $mat e tem que ser $linha, por exemplo! echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";
psiico Posted May 9, 2012 at 12:12 PM Report #454048 Posted May 9, 2012 at 12:12 PM nos inners nao te faltará o group by ? Psiico // Portfolio
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now