Carcleo 4 Denunciar post Postado Agosto 20, 2010 Bom dia! Como eu faria uma consulta sql que me retornasse, por exemplo, Tenho 3 tabelas fornecedores produtos produtopreco Nessa última, o fornecedor loga no site e escolhe varios produtos e cadastra o preço que ele da ao produito. tipo assim é gravado na tabela produtopreco: id idProduto idFornecedor preco 1 1 1 2.30 2 2 1 3.20 3 1 2 2.35 Assim por diante. A consuilta tem que me retornar os ids dos produtos, a somatória dos preços dos produtos e uma vez o numero id do fornecedor. Isso é claro, de cada fornecedor. Tem como fazer uma consulta sql que retorne isso? A idéia é retrornar os dados da seguinte forma: Ta aqui a estrutura das tabelas : Estou usando php /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */; /*!40101 SET SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES */; /*!40103 SET SQL_NOTES='ON' */; CREATE TABLE admin ( id int(10) unsigned NOT NULL AUTO_INCREMENT, nome varchar(200) NOT NULL DEFAULT '', Usuario varchar(35) NOT NULL DEFAULT '', Senha varchar(35) NOT NULL DEFAULT '', bloqueio char(1) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE cidades ( id int(5) NOT NULL DEFAULT '0', estado char(2) NOT NULL DEFAULT '', nome varchar(200) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE contato ( Id int(4) unsigned NOT NULL AUTO_INCREMENT, IdFornecedor int(4) NOT NULL DEFAULT '0', Email varchar(100) NOT NULL DEFAULT '', Titulo varchar(100) NOT NULL DEFAULT '', Texto text NOT NULL, PRIMARY KEY (Id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE fornecedores ( id int(4) unsigned NOT NULL AUTO_INCREMENT, nome varchar(200) NOT NULL DEFAULT '', responsavel varchar(200) NOT NULL DEFAULT '', cpf varchar(11) NOT NULL DEFAULT '0', endereco varchar(200) NOT NULL DEFAULT '', numero varchar(20) NOT NULL DEFAULT '0', bairro varchar(100) NOT NULL DEFAULT '', estado char(2) NOT NULL DEFAULT '0', cidade int(6) NOT NULL DEFAULT '0', tel varchar(10) NOT NULL DEFAULT '0', cel varchar(10) DEFAULT '0', usuario varchar(6) NOT NULL DEFAULT '', senha varchar(6) NOT NULL DEFAULT '', data date NOT NULL DEFAULT '0000-00-00', bloqueio char(1) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; CREATE TABLE produtopreco ( id int(5) unsigned NOT NULL AUTO_INCREMENT, idProduto int(4) NOT NULL, idFornecedor int(4) NOT NULL, preco varchar(15) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; CREATE TABLE produtos ( id int(5) unsigned NOT NULL AUTO_INCREMENT, nome varchar(150) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; Estou usando a seguinte sql mas essa só me retorna apenas o primeiro produto cadastrado na tabela. select distinct(pp.idFornecedor), f.nome, sum(pp.preco) from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) Compartilhar este post Link para o post Compartilhar em outros sites
Fabio Chupak 0 Denunciar post Postado Agosto 20, 2010 Um meio mais pratico para resolver essa questão seria você usar um "NESTED REPEAT" Cria a consulta do forncedor: SELECT distinct(pp.idFornecedor), f.nome, sum(pp.preco) as preco FROM produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor inner join produtos pd on pd.id = pp.idProduto GROUP BY pp.idFornecedor ORDER BY preco Cria a consulta do produto com o NESTED REPEAT preparado SELECT pd.nome FROM produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor inner join produtos pd on pd.id = pp.idProduto WHERE pp.idFornecedor = 123456789 GROUP BY pp.idProduto ORDER BY preco Depois e so fazer as buscas no sql, eu uso PHP exemplo. segue ai o codigo de como ficou <?php require_once('Connections/localhost.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } mysql_select_db($database_localhost, $localhost); $query_rs_totafornecedor = "select distinct(pp.idFornecedor), f.nome, sum(pp.preco) as preco from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor inner join produtos pd on pd.id = pp.idProduto group by pp.idFornecedor order by preco"; $rs_totafornecedor = mysql_query($query_rs_totafornecedor, $localhost) or die(mysql_error()); $row_rs_totafornecedor = mysql_fetch_assoc($rs_totafornecedor); $totalRows_rs_totafornecedor = mysql_num_rows($rs_totafornecedor); mysql_select_db($database_localhost, $localhost); $query_rs_produtos = "select pd.nome from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor inner join produtos pd on pd.id = pp.idProduto where pp.idFornecedor = 123456789 group by pp.idProduto order by preco"; $rs_produtos = mysql_query($query_rs_produtos, $localhost) or die(mysql_error()); $row_rs_produtos = mysql_fetch_assoc($rs_produtos); $totalRows_rs_produtos = mysql_num_rows($rs_produtos); ?><!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=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <table width="50%" border="1"> <tr> <td align="center">Produtos</td> <td align="center">Preço</td> <td align="center">Fornecedor</td> </tr> <?php do { ?> <tr> <td><div align="center"> <?php if ($totalRows_rs_totafornecedor>0) { $nested_query_rs_produtos = str_replace("123456789", $row_rs_totafornecedor['idFornecedor'], $query_rs_produtos); mysql_select_db($database_localhost); $rs_produtos = mysql_query($nested_query_rs_produtos, $localhost) or die(mysql_error()); $row_rs_produtos = mysql_fetch_assoc($rs_produtos); $totalRows_rs_produtos = mysql_num_rows($rs_produtos); $nested_sw = false; if (isset($row_rs_produtos) && is_array($row_rs_produtos)) { do { //Nested repeat ?> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><?php echo $row_rs_produtos['nome']; ?></td> </tr> </table> <?php } while ($row_rs_produtos = mysql_fetch_assoc($rs_produtos)); //Nested move next } } ?> </div></td> <td><div align="center"><?php echo $row_rs_totafornecedor['preco']; ?></div></td> <td><div align="center"><?php echo $row_rs_totafornecedor['nome']; ?></div></td> </tr> <?php } while ($row_rs_totafornecedor = mysql_fetch_assoc($rs_totafornecedor)); ?> </table> </body> </html> <?php mysql_free_result($rs_totafornecedor); mysql_free_result($rs_produtos); ?> o RESULTADO QUE TEMOS ENTÃO É: Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 20, 2010 Ok, consegui assim: completim. <? $produtos=mysql_query(" SELECT id, nome FROM produtos "); if (mysql_num_rows($produtos)==0){print "Num deu!";} else { ?> <form name="verpreco" method="post" action="?acao=verpreco"> <table width="500" border="1" align="center"> <tr> <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td> </tr> <tr><td colspan="10">Produto:</td></tr> <? $i=1; while (list($id, $nome) = mysql_fetch_row($produtos)) { echo '<td><input type="checkbox" name="produtoid[]" value="'.$id.'" />'.$nome.'</td>'; if( $i%10==0 ) {echo '</tr><tr>';} $i++; } ?> <tr> <td colspan="10" align="center" valign="middle"><input type="submit" value="Pesquizar" /></td> </tr> </table> </form> <? } ?> ------------------------------------------------- <? if($acao=="verpreco") { //aqui, verifico de ja foi clikado na paginaçao e se a variavel iproduto(do link da paginação) veio. Se sim, decodifica, se não, prossegue o código. if ($idproduto) { $produtoid=urldecode($idproduto); } else { foreach($_POST['produtoid'] AS $key => $value) { $var[]="pp.idProduto=".$value." or"; } $produtoid=implode(' ',$var); $produtoid= substr($produtoid,0, -3); } //aqui,faço uma pesquisa pelos nomes dos produitos para exibir no cabeçalho da tabela $pesquisaprodutos=mysql_query(" select distinct(nome ) from produtos p inner join produtopreco pp on pp.idProduto=p.id where $produtoid "); while(list($nomesdeprodutos) = mysql_fetch_row($pesquisaprodutos)) { $varnome[]=$nomesdeprodutos." e "; } $nomes=implode(' ',$varnome); $produtonome= substr($nomes,0, -2); //aqui, começo a tabela print "<table align='center' width=400 bgcolor='#0080C0'>"; print "<tr ><td align=center colspan=3>Preços dos fornecedores para os produtos $produtonome</td></tr>"; //aqui começo a paginação. $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome, sum(pp.preco) from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) "); $total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela $lpp = 10; // Especifique quantos resultados você quer por página $paginas = ceil($total / $lpp); // Retorna o total de páginas if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada $inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome, sum(pp.preco) from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) LIMIT $inicio, $lpp "); if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>Não foi encontrado nenhum registro para a sua pesquisa</font></center></td></tr><?php } else { print "<tr BGCOLOR='#CCCCCC'>"; print " <td align=center>Produto</td> "; print " <td align=center>Preço Total</td> "; print " <td align=center>Fornecedor</td> "; print "</tr>"; while(list($idFornecedor, $nomefornecedor, $precototal)=mysql_fetch_row($sql)){ $sql2=mysql_query(" select p.nome, pp.preco from produtopreco pp inner join produtos p on p.id=pp.idProduto inner join fornecedores f on f.id=pp.idFornecedor where pp.idFornecedor = $idFornecedor "); print "<tr BGCOLOR='#FFFFFF'>"; print " <td align=center>"; while (list($nomeproduto,$preco)=mysql_fetch_row($sql2)) { print $nomeproduto." - R$ ".formata_moeda($preco)."<br>"; } print "</td>"; print " <td align=center>R$ ".formata_moeda($precototal)." </td> "; print " <td align=center>$nomefornecedor </td> "; print "</tr>"; } } if($pagina > 0) { $menos = $pagina - 1; $url = "$PHP_SELF?acao=verpreco&pagina=$menos&idproduto=".urlencode($produtoid); echo "<a href=".$url.">Anterior</a>"; // Vai para a página anterior } for($i=0;$i<$paginas;$i++) { // Gera um loop com o link para as páginas $url = "$PHP_SELF?acao=verpreco&pagina=$i&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">$i</a>"; } if($pagina < ($paginas - 1)) { $mais = $pagina + 1; $url = "$PHP_SELF?acao=verpreco&pagina=$mais&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">Próxima</a>"; } print "</table>"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 21, 2010 SELECT GROUP_CONCAT(pr.nome) Produtos, sum(pp.preco) Preco_Total, fo.nome Fornecedor FROM fornecedores fo , produtopreco pp, produtos pr where pp.idproduto = pr.id and pp.idfornecedor = fo.id GROUP BY fo.nome Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 21, 2010 só, que dessa forma, eu não teria o retorno dos preços tambem, alem da soma, de cada produto em separado(pp.preco) para eu exibir assim: bala R$2,00 doce R$2.20 R$7,20 Fornecedor A doce R$3,00 Ou teria como implementar? Fiz fo jeito abaixo e funcionou, um while dentro de outro. Mas, se tivesse como optimizar essa consulta seria melhor.Segue: <? $produtos=mysql_query(" SELECT id, nome FROM produtos "); if (mysql_num_rows($produtos)==0){print "Num deu!";} else { ?> <form name="verpreco" method="post" action="?acao=verpreco"> <table width="500" border="1" align="center"> <tr> <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td> </tr> <tr><td colspan="10">Produto:</td></tr> <? $i=1; while (list($id, $nome) = mysql_fetch_row($produtos)) { echo '<td><input type="checkbox" name="produtoid[]" value="'.$id.'" />'.$nome.'</td>'; if( $i%10==0 ) {echo '</tr><tr>';} $i++; } ?> <tr> <td colspan="10" align="center" valign="middle"><input type="submit" value="Pesquizar" /></td> </tr> </table> </form> <? } ?> ------------------------------------------------- <? if($acao=="verpreco") { //aqui, verifico de ja foi clikado na paginaçao e se a variavel iproduto(do link da paginação) veio. Se sim, decodifica, se não, prossegue o código. if ($idproduto) { $produtoid=urldecode($idproduto); } else { foreach($_POST['produtoid'] AS $key => $value) { $var[]="pp.idProduto=".$value." or"; } $produtoid=implode(' ',$var); $produtoid= substr($produtoid,0, -3); } //aqui,faço uma pesquisa pelos nomes dos produitos para exibir no cabeçalho da tabela $pesquisaprodutos=mysql_query(" select distinct(nome ) from produtos p inner join produtopreco pp on pp.idProduto=p.id where $produtoid "); while(list($nomesdeprodutos) = mysql_fetch_row($pesquisaprodutos)) { $varnome[]=$nomesdeprodutos." e "; } $nomes=implode(' ',$varnome); $produtonome= substr($nomes,0, -2); //aqui, começo a tabela print "<table align='center' width=400 bgcolor='#0080C0'>"; print "<tr ><td align=center colspan=3>Preços dos fornecedores para os produtos $produtonome</td></tr>"; //aqui começo a paginação. $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome, sum(pp.preco) from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) "); $total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela $lpp = 10; // Especifique quantos resultados você quer por página $paginas = ceil($total / $lpp); // Retorna o total de páginas if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada $inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome, sum(pp.preco) from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) LIMIT $inicio, $lpp "); if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>Não foi encontrado nenhum registro para a sua pesquisa</font></center></td></tr><?php } else { print "<tr BGCOLOR='#CCCCCC'>"; print " <td align=center>Produto</td> "; print " <td align=center>Preço Total</td> "; print " <td align=center>Fornecedor</td> "; print "</tr>"; while(list($idFornecedor, $nomefornecedor, $precototal)=mysql_fetch_row($sql)){ $sql2=mysql_query(" select p.nome, pp.preco from produtopreco pp inner join produtos p on p.id=pp.idProduto inner join fornecedores f on f.id=pp.idFornecedor where pp.idFornecedor = $idFornecedor and ($produtoid) "); print "<tr BGCOLOR='#FFFFFF'>"; print " <td align=center>"; while (list($nomeproduto,$preco)=mysql_fetch_row($sql2)) { print $nomeproduto." - R$ ".formata_moeda($preco)."<br>"; } print "</td>"; print " <td align=center>R$ ".formata_moeda($precototal)." </td> "; print " <td align=center>$nomefornecedor </td> "; print "</tr>"; } } if($pagina > 0) { $menos = $pagina - 1; $url = "$PHP_SELF?acao=verpreco&pagina=$menos&idproduto=".urlencode($produtoid); echo "<a href=".$url.">Anterior</a>"; // Vai para a página anterior } for($i=0;$i<$paginas;$i++) { // Gera um loop com o link para as páginas $url = "$PHP_SELF?acao=verpreco&pagina=$i&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">$i</a>"; } if($pagina < ($paginas - 1)) { $mais = $pagina + 1; $url = "$PHP_SELF?acao=verpreco&pagina=$mais&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">Próxima</a>"; } print "</table>"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 21, 2010 SELECT pr.nome Produtos, fo.nome Fornecedor, sum(pp.preco) Preco_Total FROM fornecedores fo , produtopreco pp, produtos pr where pp.idproduto = pr.id and pp.idfornecedor = fo.id GROUP BY pr.nome ,fo.nome with rollup assim calcula as somas automaticamente Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 21, 2010 É, ainda não é isso. Acho dificil uma consulta dessas: Selecionar nome do fornecedor, nome do produto, preço do produto e a somatória dos produtos comprados por este fornecedor e modo que retorna, 1 linha da forma que voce deu a primeira sql e que retorne tambem tipo uma matriz assim bala -> 2,00 doce -> 2.20 7,20 Fornecedor A pirulito -> 3,00 doce -> 2.20 2,20 Fornecedor B Mas seguindo a sua lógica de raciocinio anterior, adaptando no teu código é claro, cheguei a esse consulta; SELECT GROUP_CONCAT(pr.nome,pp.preco) Produtos, sum(pp.preco) Preco_Total, fo.nome Fornecedor FROM fornecedores fo , produtopreco pp, produtos pr where pp.idproduto = pr.id and pp.idfornecedor = fo.id GROUP BY fo.nome Observe que acesdcentei na segunda linha um pp.preco.isso retorna algo assim: doce 2.35, bala 2.35 4.70 fornecedor 1 Será que tem como fazer uma quebra de linha entre um produto e outro. tipo assim: SELECT GROUP_CONCAT(pr.nome, pp.preco,(/n quebra de linha aqui)) Produtos, sum(pp.preco) Preco_Total, fo.nome Fornecedor FROM fornecedores fo , produtopreco pp, produtos pr where pp.idproduto = pr.id and pp.idfornecedor = fo.id GROUP BY fo.nome E apreoveitando, tem como formatar esses valores com R$ e duas casas depois da virgula em sql sem ter que usar php pra isso? Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 21, 2010 isso que você quer eh alguma lambança de excel que alguem viu em algum lugar, cada linha deve possuir sua propria informaçao, logo eh incorreto juntar 3 linhas em uma soh por motivos 'visuais' e ainda manter essas 3 linhas em exibição numa coluna do lado. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 22, 2010 Mas hein giesta Ví na internet ontem, que se acrescentasse um simulador ds tecla enter daria certo, testei mas não deu certo. Onde será que esta o erro? tipo assim: SELECT GROUP_CONCAT(pr.nome,pp.preco + char(13)) Produtos, sum(pp.preco) Preco_Total, fo.nome Fornecedor FROM fornecedores fo , produtopreco pp, produtos pr where pp.idproduto = pr.id and pp.idfornecedor = fo.id GROUP BY fo.nome Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 22, 2010 basicamente o q eu disse eh que o que você quer fazer nao deve ser feito, independente de poder ser feito ou nao. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 22, 2010 Ok mas , mesmo que não seja interessante fazer, me explica esse lance do chr(13). Funciona mesmo? Como é que faz? Compartilhar este post Link para o post Compartilhar em outros sites
Fabio Chupak 0 Denunciar post Postado Agosto 23, 2010 EU,fico com minha linha de raciocionio, faça alguns ajustes simples no recordset Segue codigo completo da pagina. <?php # FileName="Connection_php_mysql.htm" # Type="MYSQL" # HTTP="true" $hostname_localhost = "localhost"; $database_localhost = "test"; $username_localhost = "user"; $password_localhost = "user"; $localhost = mysql_pconnect($hostname_localhost, $username_localhost, $password_localhost) or trigger_error(mysql_error(),E_USER_ERROR); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } mysql_select_db($database_localhost, $localhost); $query_rs_totafornecedor = "select distinct(pp.idFornecedor), f.nome, sum(pp.preco) as preco from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor inner join produtos pd on pd.id = pp.idProduto group by pp.idFornecedor order by preco"; $rs_totafornecedor = mysql_query($query_rs_totafornecedor, $localhost) or die(mysql_error()); $row_rs_totafornecedor = mysql_fetch_assoc($rs_totafornecedor); $totalRows_rs_totafornecedor = mysql_num_rows($rs_totafornecedor); mysql_select_db($database_localhost, $localhost); $query_rs_produtos = "SELECT * FROM produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor inner join produtos pd on pd.id = pp.idProduto WHERE pp.idFornecedor = 'banana' GROUP BY pp.idProduto ORDER BY preco"; $rs_produtos = mysql_query($query_rs_produtos, $localhost) or die(mysql_error()); $row_rs_produtos = mysql_fetch_assoc($rs_produtos); $totalRows_rs_produtos = mysql_num_rows($rs_produtos); ?><!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=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <table width="50%" border="1"> <tr> <td align="center">Produtos</td> <td align="center">Preço</td> <td align="center">Fornecedor</td> </tr> <?php do { ?> <tr> <td><div align="center"> <?php if ($totalRows_rs_totafornecedor>0) { $nested_query_rs_produtos = str_replace("banana", $row_rs_totafornecedor['idFornecedor'], $query_rs_produtos); mysql_select_db($database_localhost); $rs_produtos = mysql_query($nested_query_rs_produtos, $localhost) or die(mysql_error()); $row_rs_produtos = mysql_fetch_assoc($rs_produtos); $totalRows_rs_produtos = mysql_num_rows($rs_produtos); $nested_sw = false; if (isset($row_rs_produtos) && is_array($row_rs_produtos)) { do { //Nested repeat ?> <table width="251" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="150"><?php echo $row_rs_produtos['nome']; ?></td> <td width="100" align="left">R$ <?php echo $row_rs_produtos['preco']; ?></td> </tr> </table> <?php } while ($row_rs_produtos = mysql_fetch_assoc($rs_produtos)); //Nested move next } } ?> </div></td> <td><div align="center"><?php echo $row_rs_totafornecedor['preco']; ?></div></td> <td><div align="center"><?php echo $row_rs_totafornecedor['nome']; ?></div></td> </tr> <?php } while ($row_rs_totafornecedor = mysql_fetch_assoc($rs_totafornecedor)); ?> </table> </body> </html> <?php mysql_free_result($rs_totafornecedor); mysql_free_result($rs_produtos); ?> Resultado Final Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Agosto 24, 2010 um resultset assombrado... Compartilhar este post Link para o post Compartilhar em outros sites