Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola a todos, estou trabalhando com o phpmyadmin e fiz uma consulta que retorna os dados dos produtos por usuário, resumindo tenho 5 tabelas, produto, pedido, item_pedido, item_pedido_preco, e usuarios a minha consulta esta demorando em torno de 1 minuto para retornar queria ver se algem tem alguma ideia para melhorar o desempenho, ficar mais rapido, segue as informações de cada tabela. tabela | quantidade de informações pedido = 1 item_pedido = 350 usuarios = 9 item_pedido_preco = 3150 abaixo segue o sql, estou trabalhando com PHP.
private function itemprecofinalizado(){ ini_set('max_execution_time','220'). //estou aumenta o tempo de execucao pis a consulta esta muito lenta if($this->get_request_method()!= "GET"){ $this->response('',406). }
$id =(int)$this->_request['id']. if($id > 0){ //inicio conexao com o banco $DB_HOST = "localhost". $DB_NAME = "banco". $DB_PORTA = "3306". $DB_USER = "root". $DB_PASS = "root". $conexao = mysql_connect($DB_HOST,$DB_USER,$DB_PASS) or die ("Erro na Conexão!"). $db = mysql_select_db($DB_NAME, $conexao) or die ("Erro na Conexão!"). $sqlProduto = mysql_query("SELECT * FROM item_pedido i INNER JOIN produto p ON i.id_pedido = '".$id."' AND i.id_produto = p.prod_id ORDER BY p.prod_descricao") or die (mysql_error()). $quantProduto = mysql_num_rows($sqlProduto). if($quantProduto > 0 ){ while($rowItem = mysql_fetch_array($sqlProduto)){ $duplicidade = 0. //verifica preco em duplicidade $id_pedido = $rowItem['id_pedido']. $id_prod = $rowItem['id_produto']. $prod_qtd = $rowItem['item_qtd']. $prod_descricao = $rowItem['prod_descricao']. $prod_unidade = $rowItem['prod_unidade']. $prod_embalagem = $rowItem['prod_embalagem']. //INICIO essa parte so pega o menor preco de cada item na tabela item_pedido_preco para depois fazer a comparacao $sqlMenor = mysql_query("SELECT min(item_vl_imposto) FROM item_pedido_preco r WHERE r.id_pedido ='".$id."' AND r.id_produto ='".$id_prod."' and r.item_vl_imposto!= 0") or die (mysql_error()). $rowMenor = mysql_fetch_assoc($sqlMenor). $menor = str_replace('.',',', $rowMenor['min(item_vl_imposto)']). $sqlUsuario = mysql_query("SELECT * FROM usuarios WHERE usu_nivel = 1 and usu_status = 1 ORDER BY usu_id") or die (mysql_error()). $quantUsuario = mysql_num_rows($sqlUsuario). if($quantUsuario > 0){ while($rowUsu = mysql_fetch_array($sqlUsuario)){ $usu_id = $rowUsu['usu_id']. //INICIO PRODUTO, USUARIO, E PEGAR OS PRECOS DE TODOS OS ITENS CONFORME INFORMACAO ACIMA $sqlPreco = mysql_query("SELECT * FROM item_pedido_preco WHERE id_pedido ='".$id."' AND id_produto ='".$id_prod."' AND id_usuario= '".$usu_id."' ORDER BY id_usuario") or die (mysql_error()). $quantPreco = mysql_num_rows($sqlPreco). if($quantPreco > 0){ while($rowPreco = mysql_fetch_array($sqlPreco)) { $id_usuario = $rowUsu['usu_id']. $item_vl_anterior = str_replace('.',',',$rowPreco['item_vl_imposto']). $item_vl_imposto = str_replace('.',',',$rowPreco['item_vl_imposto']). $usu_titulo = $rowUsu['usu_titulo']. $usu_imposto = $rowUsu['usu_imposto']. if($rowPreco['item_vl_unit'] == 0 or $rowPreco['item_vl_unit'] == NULL): $resultproduto[] = array( 'id_usuario' => $id_usuario, 'item_vl_imposto' => "-", 'item_vl_anterior' => "-", 'usu_titulo' => $usu_titulo, 'usu_imposto' => $usu_imposto ). else: $resultproduto[] = array( 'id_usuario' => $id_usuario, 'item_vl_imposto' => $item_vl_imposto, 'item_vl_anterior' => $item_vl_anterior, 'usu_titulo' => $usu_titulo, 'usu_imposto' => $usu_imposto ). if($item_vl_imposto == $menor): $duplicidade = $duplicidade+1. endif. endif. }//while item_preco }else{//se nao tiver no item_preco $id_usuario = $usu_id. $item_vl_anterior = "NULL". $item_vl_imposto = "NULL". $usu_titulo = $rowUsu['usu_titulo']. $usu_imposto = $rowUsu['usu_imposto']. $resultproduto[] = array( 'id_usuario' => $id_usuario, 'item_vl_imposto' => $item_vl_imposto, 'item_vl_anterior' => $item_vl_anterior, 'usu_titulo' => $usu_titulo, 'usu_imposto' => $usu_imposto ). }//FIM }//while usuario } //FIM if($duplicidade > 1)://informa qual item esta com preco em duplicidade $prod_repeat = '*'. else: $prod_repeat = ''. endif. $result[] = array( 'id_pedido' => $id_pedido, 'id_produto' => $id_prod, 'prod_qtd' => $prod_qtd, 'prod_descricao' => $prod_descricao, 'prod_unidade' => $prod_unidade, 'prod_embalagem' => $prod_embalagem, 'item_vl_unit' => $resultproduto, 'itemmenorpreco' => $menor, 'prod_repeat' => $prod_repeat ). $resultproduto = "". }//while item_pedido $this->response($this->json($result), 200). } $this->response('',204). }
} segue abaixo a imgem com o retorno da consulta. /applications/core/interface/imageproxy/imageproxy.php?img=http://www.supermercado.hccotacao.com.br/images/telafinalizado.png&key=12b1447af6916e7169cc8ccdda4843727fd91e3f3ead4b3449147f60963e0ae4" alt="telafinalizado.png" /> Grato pela ajudaCarregando comentários...