Ir para conteúdo

Arquivado

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

Carcleo

Sql com resultado dinamico

Recommended Posts

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:

Imagem Postada

 

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

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 É:

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

É, 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

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

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

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

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

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

Imagem Postada

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.