How to limit display of records according to parameters

Asked

Viewed 58 times

1

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

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’m 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 obtained I can not display all, so I was trying to make a if with all the id´s which I can show you, but it didn’t turn out very well, so I’d like some suggestions on how to fix 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)); 
  • what condition or conditions of the records you want to display?

  • Hello @Marllonnasser, I need to show the products listed in this IF I made, but I found the scheme I made can be improved.

  • what the assignment of $hora?

  • you can make a Where agrPrecoComercialAgr.Idagroproduct in (select * from productcan);

1 answer

1


I recommend the direct filter by query. Based on your question, it implies that you want to filter the records based by the hour, more specifically at 1:00 p.m. That is, anything from 13 hours, you filter the XPTO ids.

If you have how to consolidate these ids in 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... any rule that before 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)); 
  • 1

    Hello @Marllon Nasser, fantastic, thank you so much for the excellent suggestions.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.