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.
privatefunction itemprecofinalizado(){
ini_set('max_execution_time','220');//estou aumenta o tempo de execucao pis a consulta esta muito lentaif($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)ordie("Erro na Conexão!");
$db = mysql_select_db($DB_NAME, $conexao)ordie("Erro na Conexão!");//fim conexao com o banco//PEGA TODOS OS ITENS REFERENTE AO PEDIDO
$sqlProduto = mysql_query("SELECT * FROM item_pedido i INNER JOIN produto p ON i.id_produto = p.prod_id WHERE i.id_pedido = '".$id."' ORDER BY p.prod_descricao")ordie(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")ordie(mysql_error());
$rowMenor = mysql_fetch_assoc($sqlMenor);
$menor = str_replace('.',',', $rowMenor['min(item_vl_imposto)']);//FIM MENOR VALOR//INICIO BUSCA TODOS OS USUARIOS DA TABELA E EM CADA UM DELES COLOCA TODOS OS ITENS, MESMO OS QUE ELES NAO COTAO
$sqlUsuario = mysql_query("SELECT * FROM usuarios WHERE usu_nivel = 1 and usu_status = 1 ORDER BY usu_id")ordie(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")ordie(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']==0or $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}//FIMif($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);}}
Utilizamos cookies e tecnologias semelhantes de acordo com a nossa Política de Privacidade, e ao continuar navegando, você concorda com estas condições.
Pergunta
Helio Cesar
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.
segue abaixo a imgem com o retorno da consulta.
Grato pela ajuda.
Editado por Helio Cesarerro codigo
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.