Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CleberMartins

[Resolvido] selecionar e ordenar por data

Recommended Posts

Boa tarde galera...

 

Desenvolvi um sistema onde eu controlo cancelamentos de agenda de médicos... ou seja, com esse programa eu tenho um controle para saber se o médico vai estar aqui no mês que vem por exemplo.

 

Tenho dois problemas:

 

Um é que se o médico cancelar a agenda no dia 15 do mês que vem e eu pedir para o sistema selecionar todos os cancelamentos do dia 30 do mês que vem até hoje ele me trás um relatório em branco, mas se eu especificar que é até esse dia 15 ele me trás o relatório corretamente, ou seja, ele só trás o relatório corretamente se eu souber qual foi a ultima data de cancelamento, impossível saber, pois três pessoas usam esse programa e todos lançam esses cancelamentos.

 

Outro problema é colocar em ordem de data, já usei o ORDER BY e nada... aparecem todos os cancelamentos corretamente mas não na ordem correta dos cancelamentos.

 

Abaixo esta o select...

 

 

select

lanc_diaatual,

DATE_FORMAT(lanc_diacancel, '%d/%m/%Y') as lanc_diacancel,

lanc_smpessoa_id,

lanc_qtdhora,

lanc_vlhora,

lanc_vltotal,

lanc_status,

lanc_subst,

age_mot_nome,

substr(lanc_observacao,1,24)

from

age_lancamento, age_motivo

where

$filtro

$filtro2

lanc_mot_id = age_mot_id and

lanc_diacancel between DATE('$ano_i-$mes_i-$dia_i') and

DATE('$ano_f-$mes_f-$dia_f')

ORDER BY 2;

 

Obrigado pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) No between está se passado a menor data antes ?

ex :

data between '03/09/2010' and '30/12/2010'

 

2) tentou

ORDER BY lanc_diacancel
?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Motta.....

 

Já descobri um dos erros... as meninas estavam colocando até dia 31/09 e o mês nove só tem até o dia 30... vou tentar criar uma condição para que isso não aconteça novamente...

 

Mas com relação ao ORDER BY já tentei tanto com o NOME quanto com o NUMERO da coluna, e dá o mesmo problema.

 

Será que tem a ver com o formato que estou pedindo para exibir.... DATE_FORMAT ????????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cleber,

 

Se o sistema estava permitindo cadastrar data 31/09, deve ser pq o tipo do campo que você esta usando é TEXTO, ou seja, quando você ordena TEXTO é diferente de quando ordena DATA. Sugiro rever seu modelo de dados, desta forma você vai poder explorar melhor as funcionalidades do banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou criar a campanha :

 

O FORMATO DATE EXISTE, E ELE NÃO MORDE ....

 

:)

 

Brincadeira, mas usar o formato correto evita muita dor de cabeça desnecessária depois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas ai que esta... o campo esta no formato DATE, eu não consigo cadastrar com data 31/09... mas para gerar um relatório eu criei um combo onde o usuário pode selecionar o dia de 1 a 31, o mês de 1 a 12 e o ano de 2010 a 2020.

 

Não entendo porque mesmo com o campo no formato DATE não consigo gerar o relatório pela ordem de data, pesquisei na internet e vi que não sou o único que esta com o mesmo problema.

 

abaixo esta como criei o banco:

 

create table age_lancamento

(

lanc_diaatual datetime,

lanc_diacancel date,

lanc_smpessoa_id int(10),

lanc_qtdhora float,

lanc_vlhora float,

lanc_vltotal float,

lanc_status char(1),

lanc_subst varchar(255),

lanc_mot_id int(10),

lanc_observacao varchar(255)

)

 

 

 

valeu Motta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... isso é muito estranho, mas o MySQL simplesmente não ordena ou ordena errado? Pode colocar alguns exemplos de registros e como esta sendo ordenado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro... só um minuto.

 

Cara o engraçado é que se eu fizer um select através do TOAD ele ordena perfeitamente, mas com o php ele não exibe os dados na ordem.

 

Bom, vou mostrar todo o código e como ele esta exibindo....

Compartilhar este post


Link para o post
Compartilhar em outros sites

if ($medico == 0)
				{
					$filtro = "";
				}
			else if ($medico != 0)
				{
					$filtro = "lanc_smpessoa_id = $medico and";
				}
				
			if ($motivo == 0)
				{
					$filtro2 = "";
				}
			else if ($motivo != 0)
				{
					$filtro2 = "age_mot_id = $motivo and";
				}
				
				
     $sql33 = "select 
					lanc_diaatual,
					DATE_FORMAT(lanc_diacancel, '%d/%m/%Y') as lanc_diacancel,
					lanc_smpessoa_id,
					lanc_qtdhora,
					lanc_vlhora,
					lanc_vltotal,
					lanc_status,
					lanc_subst,
					age_mot_nome,
					substr(lanc_observacao,1,24)
				from 
					age_lancamento, age_motivo
				where
					$filtro
					$filtro2
					lanc_mot_id = age_mot_id and
					lanc_diacancel between DATE('$ano_i-$mes_i-$dia_i') and
										   DATE('$ano_f-$mes_f-$dia_f') 
				ORDER BY 2";
					
     $query33 = mysql_query($sql33) or die ("ERRO NA ANÁLISE DA CLÁUSULA SQL OU ACESSO AO BANCO DE DADOS")

Dia Médico Especialidade

01/03/2008 ANA LUCIA ESTEVES BOYAYAN PSICOLOGIA

03/09/2010 ADRIANA SOARES FERRAZ DERMATOLOGIA

05/09/2010 CARLOS ANTONIO DE LIMA PI ORTOPEDIA

07/08/2010 CINTIA BARBOSA PSICOLOGIA

18/08/2010 CARLOS MAURICIO MACCARE CLINICA GERAL

18/08/2010 ADRIANA SOARES FERRAZ DERMATOLOGIA

18/08/2010 AILTON AMORIM DE SOUZA ULTRASSONOGRAFISTA

18/08/2010 VALDIR LAURO SCHWERZ CARDIOLOGIA

18/08/2010 CARLOS MAURICIO MACCARE CLINICA GERAL

18/09/2010 AMERICO RUBENS LEITE DOS NEUROLOGIA

18/09/2010 MOHAMAD AHAD ELMALT OTORRINOLARINGOLOGIA

29/09/2010 RONALDO ARROYO DAUDT CIRURGIA VASCULAR

31/08/2010 VALDIR LAURO SCHWERZ CARDIOLOGIA

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ORDER BY 2 faz com que a ordem seja DATE_FORMAT(lanc_diacancel, '%d/%m/%Y') ou seja a data no formato de string, assim os dias veem juntos e na ordem deste, independente do mês.

 

Troque para ORDER BY lanc_diacancel , que deverá ordenar pela data.

---------------------------------------------------------------------------------------

lanc_diacancel between DATE('$ano_i-$mes_i-$dia_i') and DATE('$ano_f-$mes_f-$dia_f')

verifique se realmente a data inicial $xxx_i é anterior a final $xxx_f, se os parametros estiverem trocados pode não trazer os registros de forma correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara..te juro que já fiz tudo isso... bom estava pensando em formatar dia, mes e ano para texto e depois ordernar por ano, mes e dia, sei lá... vou dar mais uma estudada... qualquer coisa vou postar ai beleza?!?!?!

 

valeu Motta e Prog.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.