Well, I'm developing a code that only came up with the following problem, when I performed a performance test with 5mil lines, it exceeded the limit of 30 seconds ... what could be wrong?
$app->get('/receitagrafico/', function() use ($app) {
$request = \Slim\Slim::getInstance()->request();
$router = $app->router();
$datai = date("Y-m-01");
$dataf = date("Y-m-t");
$stmt1 = getConn()->query("SELECT SUM(totalz + entrega - ajuste) AS valor_total_soma FROM movimento WHERE status!='C' AND data BETWEEN '{$datai}' AND '{$dataf}'");
$onoff = ( $stmt1->rowCount() > 0 ? true : false );
$dados_produto = $stmt1->fetchObject();
$total_atual = ( $onoff ? $dados_produto->valor_total_soma : 0 );
$stmt1 = getConn()->query("SELECT SUM(totalz + entrega - ajuste) AS valor_total_soma FROM movimento WHERE status!='C' AND data BETWEEN '{$datai}' AND '{$dataf}'");
$onoff = ( $stmt1->rowCount() > 0 ? true : false );
$dados_produto = $stmt1->fetchObject();
$bugfix = ( $dados_produto->valor_total_soma == 0 ? 1 : $dados_produto->valor_total_soma );
$total_passado = ( $onoff ? ($total_atual-$dados_produto->valor_total_soma)/$bugfix*100 : 0 );
$total_lanche = [];
$lanche_lengd = [];
$stmt1 = getConn()->query("SELECT produtos,data FROM movimento WHERE status!='C' AND data BETWEEN '{$datai}' AND '{$dataf}'");
$onoff = ( $stmt1->rowCount() > 0 ? true : false );
while($dados_produto = $stmt1->fetchObject()){
if ($stmt1->rowCount() > 0) {
$arr = explode(',', $dados_produto->produtos);
$arrN_am = array();
foreach($arr as $item){
$valor = explode(':', $item);
$arrN_am[][$valor[0]] = $valor[1];
}
foreach($arrN_am as $item => $id){
foreach($id as $item2 => $id2){
$id_produto = $item2;
$qtd = $id2;
if(is_double($id2)){
$qtd = 1;
}
$stmt3 = getConn()->query("SELECT * FROM produto WHERE hash={$item2}");
$resultado_lanche = $stmt3->fetchObject();
if (!isset($total_lanche[$resultado_lanche->nome])) {
$total_lanche[$resultado_lanche->nome] = $qtd;
$lanche_lengd[] = $resultado_lanche->nome;
}else{
$total_lanche[$resultado_lanche->nome] += $qtd;
}
}
}
}
}
if ($onoff){
$tt3 = $lanche_lengd;
$tt4 = [];
foreach($total_lanche as $item => $id){
$tt4['name'] = 'Abril';
$tt4['data'][] = $id;
}
}else{
$tt3 = 0;
$tt4 = false;
}
echo "[";
echoResponse(200, $total_atual);
echo ",";
echoResponse(200, $total_passado);
echo ",";
echoResponse(200, $tt3);
echo ",";
echoResponse(200, [$tt4]);
echo "]";
});
Return:
[53,0,["Torrada","Cachorro quente"],[{"name":"Abril","data":[4,1]}]]
1st issue: I've done the changes in the variables, in db for DATE, and in the code, I did not put the date as index. I've already done a test with 5 thousand lines in this new code and it continues to exceed the time
newcomparison...ran5milquerys
$stmt3=getConn()->query("SELECT hash,nome FROM produto");
$resultado_lanche = $stmt3->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$resultado_lanche = array_map('reset', $resultado_lanche);
$resultado_lanche = array_map('reset', $resultado_lanche);
$total_lanche = [];
$lanche_lengd = [];
$stmt1 = getConn()->query("SELECT produtos,data FROM movimento WHERE status!='C' AND data BETWEEN '{$datai}' AND '{$dataf}'");
$onoff = ( $stmt1->rowCount() > 0 ? true : false );
while($dados_produto = $stmt1->fetchObject()){
if ($stmt1->rowCount() > 0) {
$arr = explode(',', $dados_produto->produtos);
$arrN_am = array();
foreach($arr as $item){
$valor = explode(':', $item);
$arrN_am[][$valor[0]] = $valor[1];
}
foreach($arrN_am as $item => $id){
foreach($id as $item2 => $id2){
$id_produto = $item2;
$qtd = $id2;
if(is_double($id2)){
$qtd = 1;
}
if (!isset($total_lanche[$resultado_lanche[$item2]])) {
$total_lanche[$resultado_lanche[$item2]] = $qtd;
$lanche_lengd[] = $resultado_lanche[$item2];
}else{
$total_lanche[$resultado_lanche[$item2]] += $qtd;
}
}
}
}
}