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!");
//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_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)']);
//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") 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);
}
}
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 Cesar
Imagem errada
Link para o comentário
Compartilhar em outros sites
2 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.