Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
É o seguinte galera, tenho um sistema de cotações de mercado onde abro uma cotação de produtos e os fornecedores podem participar digitando os valores nos produtos que estão na cotação.
Tenho uma tela de relatório onde vou exibir em uma tabela a lista de produtos e quais os valores(a vista | a prazo - qtde) cada fornecedor preencheu.
no topo da tabela eu faço um select e guardo em um array os fornedores, e exibo eles no <th>
depois eu faço o mesmo com a lista de produtos
o que está pegando é que em cada <td> de cada fornecedor eu estou tendo que executar um select para trazer os dados que ele digitou, no exemplo da imagem abaixo tenho 3 produtos e 2 fornecedores o que dá um total de 6 queries, imaginem se fosse 100 x 10
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.bonnet.com.br/tabela.png&key=a0209646dc37f933916a77bf69bff6fa59b540f7962d7488a386d80575ead16c" alt="tabela.png" />
Eu gostaria de otimizar para que não precise executar ess monte de query, alguém tem uma dica ou sugestão para me dar?
o mais difícil mesmo vai ser depois ter que pintar cada TD em que o valor for mais barato que os outros, mas isso é algo que ainda vou pensar como resolver....
código:
<!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>
<style type="text/css"> margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
#tabela tr,#tabela td{
border:1px solid #ccc;
border-collapse: collapse;
} border:1px solid #ccc;
background: #555;
color:#FFF;
}
#tabela{
margin: 4px ;
}</style>
<link type="text/css" href="style.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#tabela tbody tr:even').addClass('zebra');
})
</script>
</head>
<body>
<?php
include("classes/pdo.php");
$conn = Conexao::connPDO();
$qr = $conn->query("SELECT
c.idcotacao,
f.idfornecedor,
f.razaosocial
FROM cotacao_fornecedor cf
INNER JOIN cotacao c ON(c.idcotacao = cf.idcotacao)
INNER JOIN fornecedores f ON(f.idfornecedor = cf.idfornecedor)
WHERE c.idcotacao = '".(int)$idcotacao."'
GROUP BY f.idfornecedor
");
$total = $qr->rowCount(); //total de fornecedores
while($row = $qr->fetch(PDO::FETCH_OBJ)){
$idfornecedor[] = $row->idfornecedor;
$fornecedor[] = $row->razaosocial;
}
?>
<div id="msg"></div>
<table border="0" id="tabela" cellpadding="5" cellspacing="0" style="border:1px solid #000; border-collapse:collapse" class="textonormalpq">
<thead>
<tr>
<th width="240" align="left"><b>PRODUTOS</b></th>
<?php
$i = 0; // iteração fornecedor
while($i < $total){
?>
<th class="thfornecedor" align="left"><?php echo $fornecedor[$i] ?></th>
<?php
$i++;
}
?>
</tr>
</thead>
<tbody>
<?php
//SELECT DOS PRODUTOS DA COTAÇÃO
$qrprod = $conn->query("SELECT
c.idcotacao,
ic.idproduto,
p.idproduto,
p.produto
FROM itens_cotacao ic
INNER JOIN cotacao c ON(c.idcotacao = ic.idcotacao)
INNER JOIN produtos p ON(p.idproduto = ic.idproduto)
WHERE c.idcotacao = '$idcotacao'");
$totalprodutos = $qrprod->rowCount();
//GRAVA EM ARRAY OS NOMES E IDS DOS PRODUTOS
while($rowprod = $qrprod->fetch(PDO::FETCH_OBJ)) {
$produtos[] = $rowprod->produto;
$idproduto[] = $rowprod->idproduto;
}
$x = 0; //iteração de produtos
while($x < $totalprodutos){
$k = 0;
?>
<tr>
<?php
$td = 1;//quantidade de TD
while($k < $total +1 ){
if($td == 1){ // se td for igual a 1 então a coluna é de produtos
?>
<td class="tdprod"><?php echo $idproduto[$x].' - '.strtoupper($produtos[$x]) ?></td>
<?php
}else{
//EXECUTA O SELECT DENTRO DE PARA CADA TD
$qrvalores = $conn->query("SELECT * FROM itens_cot_fornecedor
WHERE idcotacao = '$idcotacao'
AND idfornecedor = '".$idfornecedor[$k-1]."'
AND idproduto = '".$idproduto[$x]."'");
if($qrvalores){
$count++;
}
$rowvalor = $qrvalores->fetch(PDO::FETCH_OBJ);
$valores[$k][] = $rowvalor->preco_avista;
?>
<td>
<?php
if(!empty($rowvalor->preco_avista)){
echo "R$ ".number_format($rowvalor->preco_avista,2,',','.');
}
if(!empty($rowvalor->preco_prazo)){
echo " | R$ ".number_format($rowvalor->preco_prazo,2,',','.');
}
?>
<input type="type" id="qtd" name="qtd" size="3" maxlength="3" value="<?php echo $rowvalor->qtde?>" class="textonormalpq" />
<input type="checkbox" name="name" />
</td>
<?php
}
$td++;
$k++;
}
?>
</tr>
<?php
$x++;
}
?>
</tbody>
</table>
</body>
</html>
BD:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.bonnet.com.br/basedados.png&key=5998a2881388570c9d2e9d56f9013bf2195ed2e58aeff2b255682a9da1309775" alt="basedados.png" />
Carregando comentários...