How to limit display of records according to parameters

1

I have a problem and the solution I am trying to apply does not seem to be the right one, I need to show some results of certain products limiting this display, I have the following sql that generates the grupos of products: p>

SELECT
 agrGrupoPrecoCialAgr.Descricao,
 agrAgroProduto.Nome,
 agrPrecoComercialAgr.DataValidadeInicial,
 agrPrecoComercialAgr.HoraValidadeInicial,
 agrPrecoComercialAgr.DataValidadeFinal,
 agrPrecoComercialAgr.HoraValidadeFinal,
 agrPrecoComercialAgr.PrecoFinal,
 agrPrecoComercialAgr.IdAgroProduto
FROM
 agrGrupoPrecoCialAgr
 INNER JOIN agrPrecoComercialAgr
  ON agrGrupoPrecoCialAgr.IdGrupo = agrPrecoComercialAgr.IdGrupo
 INNER JOIN agrAgroProduto
  ON agrPrecoComercialAgr.IdAgroProduto = agrAgroProduto.IdAgroProduto
WHERE
 agrPrecoComercialAgr.IdUnicoop = 33                                                             
 AND agrGrupoPrecoCialAgr.MostraPainel = 1
 AND agrPrecoComercialAgr.DataValidadeInicial = '$dataCalendario'
 AND agrGrupoPrecoCialAgr.IdGrupo = '$idGrupo'
 AND agrGrupoPrecoCialAgr.Descricao <> 'GOIAS'
 AND agrGrupoPrecoCialAgr.Ativo = 1
ORDER BY
 agrGrupoPrecoCialAgr.Ordem ASC,
 agrPrecoComercialAgr.IdAgroProduto ASC

With this data I am mounting a xml

do {    
    // NOME DO PRODUTO          
    $nome  = str_replace("", "", $rstPreco['Nome']);
    $nome  = str_replace("", "", $nome);        
    // PREÇO DO PRODUTO
    $preco = number_format( $rstPreco['PrecoFinal'], $casasDecimais, ',', '.' );
    // IDENTIFICAÇÃO DO PRODUTO
    $IdAgroProduto = $rstPreco['IdAgroProduto'];
    if ($preco == "0,00"){
            $preco = "F.M.";                                
    }
    // MOSTRA PREÇOS APARTIR DAS 13:00 HS.
    // LIMITAR A EXIBIÇÃO NESSE MOMENTO
    if ($hora >= $rstPreco['HoraValidadeInicial'] && $hora \r\n");
            fwrite($fp, "".$IdAgroProduto."\r\n");                         
            fwrite($fp, "$nome\r\n");
            fwrite($fp, "$preco\r\n");                           
            fwrite($fp, "\r\n");                             
    } else {                            
            fwrite($fp, "\r\n");
            fwrite($fp, "".$IdAgroProduto."\r\n");                             
            fwrite($fp, "$nome\r\n");
            fwrite($fp, "N.D\r\n");                          
            fwrite($fp, "\r\n");                         
    }

} while ($rstPreco = mysql_fetch_assoc($conPreco)); 

From the amount of records I can not display all, so I was trying to make a if with all id´s that I can show, but it was not very cool, so I would like suggestions on how to solve this.

What I tried to do was this:

do {    
// NOME DO PRODUTO          
$nome  = str_replace("<b>", "", $rstPreco['Nome']);
$nome  = str_replace("</b>", "", $nome);        
// PREÇO DO PRODUTO
$preco = number_format( $rstPreco['PrecoFinal'], $casasDecimais, ',', '.' );
// IDENTIFICAÇÃO DO PRODUTO
$IdAgroProduto = $rstPreco['IdAgroProduto'];
    if ($preco == "0,00"){
            $preco = "F.M.";                                
    }
    // MOSTRA PREÇOS APARTIR DAS 13:00 HS.
    if ($hora >= $rstPreco['HoraValidadeInicial'] && $hora <= $rstPreco['HoraValidadeFinal']){
        if($IdAgroProduto == 1 || $IdAgroProduto == 74 || $IdAgroProduto == 70 || $IdAgroProduto == 195 || $IdAgroProduto == 196 || $IdAgroProduto == 197|| $IdAgroProduto == 368 || $IdAgroProduto == 75 || $IdAgroProduto == 429 || $IdAgroProduto == 430) {                                              
            fwrite($fp, "<cotacoes>\r\n");
            fwrite($fp, "<codigo>".$IdAgroProduto."</codigo>\r\n");                         
            fwrite($fp, "<nome>$nome</nome>\r\n");
            fwrite($fp, "<valor>$preco</valor>\r\n");                           
            fwrite($fp, "</cotacoes>\r\n");     
        }               
    } else {                        
            fwrite($fp, "<cotacoes>\r\n");
            fwrite($fp, "<codigo>".$IdAgroProduto."</codigo>\r\n");                             
            fwrite($fp, "<nome>$nome</nome>\r\n");
            fwrite($fp, "<valor>N.D</valor>\r\n");                          
            fwrite($fp, "</cotacoes>\r\n");                             
    }
 }

} while ($rstPreco = mysql_fetch_assoc($conPreco)); 
    
asked by anonymous 21.10.2016 / 14:00

1 answer

1

I advise the direct php by the query. Based on your question, it means that you want to filter time-based records, more specifically at 1:00 p.m. That is, anything from 13 o'clock, you filter the XPTO ids.

If you can consolidate these ids into a query like:

select IdAgroProduto from agrPrecoComercialAgr where CONDICAO_PARA_EXIBIR_SOMENTE_O_QUE_VC_QUER

Use this query:

SELECT
 agrGrupoPrecoCialAgr.Descricao,
 agrAgroProduto.Nome,
 agrPrecoComercialAgr.DataValidadeInicial,
 agrPrecoComercialAgr.HoraValidadeInicial,
 agrPrecoComercialAgr.DataValidadeFinal,
 agrPrecoComercialAgr.HoraValidadeFinal,
 agrPrecoComercialAgr.PrecoFinal,
 agrPrecoComercialAgr.IdAgroProduto
FROM
 agrGrupoPrecoCialAgr
 INNER JOIN agrPrecoComercialAgr
  ON agrGrupoPrecoCialAgr.IdGrupo = agrPrecoComercialAgr.IdGrupo
 INNER JOIN agrAgroProduto
  ON agrPrecoComercialAgr.IdAgroProduto = agrAgroProduto.IdAgroProduto
WHERE
 agrPrecoComercialAgr.IdUnicoop = 33                                                             
 AND agrGrupoPrecoCialAgr.MostraPainel = 1
 AND agrPrecoComercialAgr.DataValidadeInicial = '$dataCalendario'
 AND agrGrupoPrecoCialAgr.IdGrupo = '$idGrupo'
 AND agrGrupoPrecoCialAgr.Descricao <> 'GOIAS'
 AND agrGrupoPrecoCialAgr.Ativo = 1
 AND ((HOUR(HoraValidadeInicial) > 13 and agrPrecoComercialAgr.IdAgroProduto in (select IdAgroProduto from agrPrecoComercialAgr where CONDICAO_PARA_EXIBIR_SOMENTE_O_QUE_VC_QUER)) or (HOUR(HoraValidadeInicial) < 13))
ORDER BY
 agrGrupoPrecoCialAgr.Ordem ASC,
 agrPrecoComercialAgr.IdAgroProduto ASC

If you do not have ... use specifying the IDS:

SELECT
 agrGrupoPrecoCialAgr.Descricao,
 agrAgroProduto.Nome,
 agrPrecoComercialAgr.DataValidadeInicial,
 agrPrecoComercialAgr.HoraValidadeInicial,
 agrPrecoComercialAgr.DataValidadeFinal,
 agrPrecoComercialAgr.HoraValidadeFinal,
 agrPrecoComercialAgr.PrecoFinal,
 agrPrecoComercialAgr.IdAgroProduto
FROM
 agrGrupoPrecoCialAgr
 INNER JOIN agrPrecoComercialAgr
  ON agrGrupoPrecoCialAgr.IdGrupo = agrPrecoComercialAgr.IdGrupo
 INNER JOIN agrAgroProduto
  ON agrPrecoComercialAgr.IdAgroProduto = agrAgroProduto.IdAgroProduto
WHERE
 agrPrecoComercialAgr.IdUnicoop = 33                                                             
 AND agrGrupoPrecoCialAgr.MostraPainel = 1
 AND agrPrecoComercialAgr.DataValidadeInicial = '$dataCalendario'
 AND agrGrupoPrecoCialAgr.IdGrupo = '$idGrupo'
 AND agrGrupoPrecoCialAgr.Descricao <> 'GOIAS'
 AND agrGrupoPrecoCialAgr.Ativo = 1
 AND ((HOUR(HoraValidadeInicial) > 13 and agrPrecoComercialAgr.IdAgroProduto in (1,74,70,195,196,197,368,75,429,430)) or (HOUR(HoraValidadeInicial) < 13))
ORDER BY
 agrGrupoPrecoCialAgr.Ordem ASC,
 agrPrecoComercialAgr.IdAgroProduto ASC

And the assembly of your XML is only bringing what comes from the query ... the whole rule that you had done in the assembly, will be done in the query.

do {    
// NOME DO PRODUTO          
$nome  = str_replace("<b>", "", $rstPreco['Nome']);
$nome  = str_replace("</b>", "", $nome);        
// PREÇO DO PRODUTO
$preco = number_format( $rstPreco['PrecoFinal'], $casasDecimais, ',', '.' );
// IDENTIFICAÇÃO DO PRODUTO
$IdAgroProduto = $rstPreco['IdAgroProduto'];
    if ($preco == "0,00"){
            $preco = "F.M.";                                
    }                  
    fwrite($fp, "<cotacoes>\r\n");
    fwrite($fp, "<codigo>".$IdAgroProduto."</codigo>\r\n");                             
    fwrite($fp, "<nome>$nome</nome>\r\n");
    fwrite($fp, "<valor>N.D</valor>\r\n");                          
    fwrite($fp, "</cotacoes>\r\n");    
 }

} while ($rstPreco = mysql_fetch_assoc($conPreco)); 
    
21.10.2016 / 14:51