Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Saudações!!
Tenho um campo na tabela da seguinte forma:
boleto_data varchar(255) not null
Onde há cerca de 5000 registros inseridos.
Preciso fazer uma consulta de boletos, por exemplo, entre 01/08/2006 até 15/09/2006.
Dados:
Mysql: 4.0.25
PHP: 4.2
Estou desenvolvendo algo +/- assim:
>> > <?>> >>> > function fa($data){>> > list($dia, $mes, $ano) = explode("/", $data);>> > return "{$ano}-{$mes}-{$dia}";>> > }>> >>> >>> > function calcular_data(&$data, $dias){>> > list($dia, $mes, $ano) = explode("/", $data);>> > $dataf = date("d/m/Y", mktime(0, 0, 0, $mes, ($dia ->> $dias), $ano));>> > if(date("w", strtotime(fa($dataf))) == 6){ //SABADO;>> > //==============================>> > $dataf = date("d/m/Y", mktime(0, 0, 0, $mes, ($dia - ($dias +>> > 1)), $ano));>> > //==============================>> > }elseif(date("w", strtotime(fa($dataf))) == 0){ //DOMINGO;>> > //==============================>> > $dataf = date("d/m/Y", mktime(0, 0, 0, $mes, ($dia - ($dias +>> > 2)), $ano));>> > //==============================>> > }>> > return $dataf;>> > }>> >>> > function listar_boletos($data){>> > conexao();>> > $q = "SELECT * FROM boletos ORDER BY boleto_data;";>> > $r = mysql_query($q);>> > $mkt_f = strtotime($data);>> > $mkt_i = strtotime(fa(calcular_data($data, 5)));>> > while($reg = mysql_fetch_array($r)){>> > $mkt_db = strtotime(fa($reg['boleto_data)));>> > if($mkt_db >= $mkt_i && $mkt_db <= $mkt_f){>> > //BOLETOS DO PERIODO, EXIBIR NA TELA>> > }>> > }>> > }>> >>> > ?>
O que sugerem para resolver este probleminha
[]s
Brother,
Não rola....
As datas já estão cadastradas assim: dd/mm/yyyy.
Mas valeu, você trentou..
>
ursolouco, só para esclarecer: observer a parte em negrito na regra.
Mas tenho uma sugestão sim: modifique o tipo do campo para date e saboreie todas as funcionalidades que o SGBD lhe proporciona. Vai dar mais trabalho num primeiro momento, mas...
>
Brother!!
Com todo respeito não acredito que o titulo do meu tópico (já está ficando chato isso aqui) seria apelativo ou qualquer coisa do tipo.
Mas tudo bem, se o jogo é assim, vamos jogar!
você tem algo a sugerir para resolver este pequeno problema ?
Abraço[]s
>
ursolouco,
Veja o que diz as regras do iMasters:
>
Jamais poste mensagens com títulos como: "ME AJUDE", "PELO AMOR DE DEUS", "ESTOU DESESPERADO", "URGENTE", "SOCORRO!", "HELP!", ou qualquer coisa similar. Utilize titulos curtos e claros, que condizem com sua dúvida.
Veja na íntegra: http://forum.imasters.com.br/index.php?act=Help
Poste títulos para seus tópicos, condizentes com o seu problema, a fim de facilitar uma futura pesquisa por outro membro!
O título do seu tópico será editado!
Hehehe!!Já pensei nisso mas não vira. A tabela está constantemente recebendo dados. (Não faço isso para evitar problemas no sistema inteiro).Valeu denovo
Outra sugestão: faça um script que faça um update nestes campos alterando para o formato yyyy-mm-dd. Depois você pode alterar o formato do campo.Não é tão ruim assim...
Urso,
O ideal seria fazer como o Thiago falou... mas eu sei o que é pegar um sistema rodando e você ter que ajustar. Bom, você pode utilizar a função SUBSTRING do MySQL pra pegar o ano, o mês e o dia individualmente e compará-los. Mas isso é mais uma gambiarra... e terá um monte de processamento na query que seria desnecessário se o campo fosse do tipo DATE.
Eu aconselho que você faça uma cópia desse sistema e vá fazendo os ajustes para ele trabalhar com um campo do tipo DATE. Aí, você marca um dia pra fazer a migração para o novo sistema. É a melhor solução que eu vejo para esse caso...
[]'s!
marca um dia pra fazer a migração para o novo sistema. É a melhor solução que eu vejo para esse caso...
Olá Illidan!!!!Se tivesse essa opção já teria migrado as das datas para o formato americano e tornando a aplicação mais escalavel e nem teria dado trabalho por aqui. Vou ver o que faço na consulta por aqui e se pintar a solução volto a postar.Valeu pela força.Até +
O q você tb pode fazer é criar outro campo nessa tabela que vai guardar a data com o TIPO certo. Aí você cria uma trigger no insert e update no campo varchar que alimenta esse campo date.IMO é um pouco menos gambiarra que a sugestão do Illidan e você perde menos performance. Mas já fiz isso do jeito que o Illidan sugeriu e funcionou muito bem tb. E 5000 registros é fichinha né.
. E 5000 registros é fichinha né.
Bom, é suave para o MYSQL.Sobre os triggers .... hehe, VERSÃO 4.0.25 meu Brother!!Mas valeu http://forum.imasters.com.br/public/style_emoticons/default/joia.gif []s
Conseguiu resolver com SUBSTRING? Acho q é a melhor maneira mesmo. Dê notícias.
Brother!!
Com todo respeito não acredito que o titulo do meu tópico (já está ficando chato isso aqui) seria apelativo ou qualquer coisa do tipo.
Mas tudo bem, se o jogo é assim, vamos jogar!
você tem algo a sugerir para resolver este pequeno problema ?
Abraço[]s
>
ursolouco,
Veja o que diz as regras do iMasters:
>
Jamais poste mensagens com títulos como: "ME AJUDE", "PELO AMOR DE DEUS", "ESTOU DESESPERADO", "URGENTE", "SOCORRO!", "HELP!", ou qualquer coisa similar. Utilize titulos curtos e claros, que condizem com sua dúvida.
Veja na íntegra: http://forum.imasters.com.br/index.php?act=Help
Poste títulos para seus tópicos, condizentes com o seu problema, a fim de facilitar uma futura pesquisa por outro membro!
O título do seu tópico será editado!