Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera estou tentando fazer um relatorio para meu sistema que tem dados inserido.
estou tentando fazer com os select.
mas quando vou colocar data ai coloco exemplo 03/12/2020 a 03/12/2020 mostra outras data e tmb da conflito em outros fitros como convenio as vezes tem o convenio e nao mostra fica bugando.
tem outra forma de fazer que use um select so e consiga por todos esses filtros?
Filtros: data_inicio, data_termino, convenio, posto, status(0, 1).
if($convenio){
$examesregistrados = mysqli_query($conn, "SELECT * FROM registropacientesexames WHERE convenio = '$convenio' AND codigo_exame = '$idexame' ORDER BY codigo_registro DESC");
}
if($posto){
$examesregistrados = mysqli_query($conn, "SELECT * FROM registropacientesexames WHERE posto = '$posto' AND codigo_exame = '$idexame' ORDER BY codigo_registro DESC");
}
if(isset($status)){
$examesregistrados = mysqli_query($conn, "SELECT * FROM registropacientesexames WHERE status = '$status' AND codigo_exame = '$idexame' ORDER BY codigo_registro DESC");
}
if($convenio && $posto){
$examesregistrados = mysqli_query($conn, "SELECT * FROM registropacientesexames WHERE convenio = '$convenio' AND posto = '$posto' AND codigo_exame = '$idexame' ORDER BY codigo_registro DESC");
}
if($convenio && isset($status)){
$examesregistrados = mysqli_query($conn, "SELECT * FROM registropacientesexames WHERE convenio = '$convenio' AND status = '$status' AND codigo_exame = '$idexame' ORDER BY codigo_registro DESC");
}
if($posto && isset($status)){
$examesregistrados = mysqli_query($conn, "SELECT * FROM registropacientesexames WHERE posto = '$posto' AND status = '$status' AND codigo_exame = '$idexame' ORDER BY codigo_registro DESC");
}
if($convenio && $posto && isset($status)){
$examesregistrados = mysqli_query($conn, "SELECT * FROM registropacientesexames WHERE convenio = '$convenio' AND posto = '$posto' AND status = '$status' AND codigo_exame = '$idexame' ORDER BY codigo_registro DESC");
}Vamos lá!
Sendo breve. Sim!, existe forma mais fácil do
que ficar fazendo um "jogo" de combinações...
SEGUE EXEMPLO:
<?php
// VARIÁVEIS PARA TESTE
$idexame = 30;
$convenio = 20;
$data_inicio = "2020-10-20";
$data_termino = "2020-11-20";
// VARIÁVEL QUE ARMAZENARÁ O FRAGMENTO SQL DOS FILTROS
$sqlFiltros = "";
// ARRAY COM AS VARIÁVEIS QUE SERÃO VERIFICADAS, E
// SUAS RESPECTIVAS COLUNAS NO DB
$filtros = [
// VARIÁVEL // COLUNA // OPERADOR
'convenio' => ['convenio', '='],
'posto' => ['posto', '='],
'status' => ['status', '='],
'data_inicio' => ['DATE(data_registro)', '>='],
'data_termino' => ['DATE(data_registro)', '<=']
];
// VERIFICA FILTROS
foreach ($filtros as $variavel => $comparativo) {
if (isset(${$variavel}) && ${$variavel}) {
$sqlFiltros .= "{$comparativo[0]} {$comparativo[1]} '${$variavel}' AND ";
}
}
// O IDEXAME É O UNICO QUE PROVAVELMENTE SEMPRE
// VIRÁ COM VALOR EM SEU CÓDIGO
$sql = "
SELECT
*
FROM
registropacientesexames
WHERE
%s
codigo_exame = '$idexame'
ORDER BY
codigo_registro DESC
";
// CONSTROI A SQL FINAL
echo sprintf($sql, $sqlFiltros);
**RESULTADO:**
SELECT
*show de bola
Olá estou com um problema creio que fiz algo errado pq tava funcionando e agora deu esse erro
Parse error: syntax error, unexpected '[' in /home2/labclinicaoficia/public_html/novoadmin/scripts/agenda-geral-relatorios.php on line 64
Nessa parte:
$filtros = [
// VARIÁVEL // COLUNA // OPERADOR
'convenio' => ['convenio', '='],
'posto' => ['posto', '='],
'status' => ['status', '='],
'data_inicio' => ['DATE(data_registro)', '>='],
'data_termino' => ['DATE(data_registro)', '<=']
];
Consegui resolver fiz tipo analise combinatoria não sei é existe uma forma mais facil porem a que conseguir foi essa
if(($data_inicio && $data_termino) != '' && $convenio == '' && $posto == '' && $status == ''){