Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Outra duvida Data


Nill

Pergunta

E o seguinte, tenho essa tela: tela.jpg

gero um relatorio pdf com ela, porém o campo data não é obrigatorio. A logica para fazer isso é tranquilo.

o que não estou conseguindo fazer é a query, pois o usuario, pode digitar a data inicial somente ou a data final ou nenhuma delas..

se o usuario digitar todas ou nenhuma delas, esta fufanfo beleza, agora não to conseguindo fazer se ele digitar somente a data inicial ou somente a data final.

Select  to_char(candidato.dtinscricao,'DD/MM/YYYY') as data, count(dtinscricao) as qtinscritos
From candidato
Inner join vestibularcurso on vestibularcurso.cdvestibularcurso = candidato.cdvestibularcurso
Where vestibularcurso.cdvestibular = 47 and
    candidato.nmcidade = 'Ipatinga' and
    candidato.dtinscricao BETWEEN $dtinicial AND $dtfinal and
    candidato.tsdelete is NULL and
    candidato.dtinscricao is NOT NULL
Group by candidato.dtinscricao
Order by candidato.dtinscricao
o problema e a 6º linha da query, eu coloquei ela assim so para visualização, pois meu codigo que monta a query deacordo com o que o user selecionar. Deu pra entender? segue parte do codigo....
// Tratando quando o usuário não informa a data...
    if ($dtinicial == "")
    {
        $cond_data = "??????????????";
    }
    if ($dtfinal == "")
    {
        $cond_data = "??????????????";
    }
    if ($dtinicial == "" || $dtfinal == "")
    {
        $cond_data = "";
    }
    else
    {
        $cond_data = "candidato.dtinscricao BETWEEN ".$dtinicial." and ".$dtfinal." and";
    }
    
    //-----------------------------------------------------------------------------------------------
    
    if ($tipo == "cor" || $tipo == "gpsanguineo" || $tipo == "raca" || $tipo == "religiao")
    {
        $cons_candidato = "Select ".$tipo.".cd".$tipo.",
                                            (CASE when nm".$tipo." is null then 'Não Responderam' else nm".$tipo." end) as ".$tipo."
                                     From candidato
                                     Inner join vestibularcurso on vestibularcurso.cdvestibularcurso = candidato.cdvestibularcurso
                                     Left join ".$tipo." on ".$tipo.".cd".$tipo." = candidato.cd".$tipo."
                                     Where ".$cond_data."
                                           candidato.tsdelete is NULL and
                                           vestibularcurso.tsdelete is NULL
                                     Group by ".$tipo.".cd".$tipo.", ".$tipo.".nm".$tipo."
                                     Order by ".$tipo.".nm".$tipo."";
    }

Editado por Nill
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

'Nill',

Você tem que seguir a seginte lógica para a incialização de suas variáveis dtinicial e dtfinal.

dtinicial não pode ser menor que a menor data existente no banco

dtfinal não pode ser maior que a maior data existente no banco.

Assim, se o usuário em sua aplicação fornecer somente a data inicial sua data final deverá ser a maior data existente no banco e a data inicial deve ser criticada para estar entre a menor e a maior data existentes no banco.

O mesmo, de forma inversa, se dá para quando o usuário fornece somente a data final.

Link para o comentário
Compartilhar em outros sites

  • 0

eu havia pensando em fazer de outra forma, mas vou seguir sua logica, acho que vai fufar melhor do que a especificação que veio pra mim fazer.

vou ir fazendo aqui na medida que surgi as duvidas vou postando aqui.

pode fechar o tópico, que fufou aqui beleza. vlw pela dica

Editado por Nill
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...