Ir para conteúdo

POWERED BY:

Arquivado

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

balexsandro

data e hora

Recommended Posts

galera, tenho um campo date no banco do formato 'yyyy/mm/dd hh:mm:ss'na busca o usuário coloca um intervalo de dias e horas... como faria essa pesquisa??? se ele especificasse só a data poderia usar o BETWEEN mas as horas atrapalha fazer assim... ex...ele digita no campo data os valores: 01/01/2007 - 05/01/2007e no campo horas: 00:00:00 - 12:00:00ou seja, para todas as datas eu tenho que pegar apenas os registro que estão nesta faixa de data, e para essas datas entre 01/01/2007 à 05/01/2007 pegar apenas os que estão entre essas horas (00:00:00 até 12:00:00)...deu para entender???? me ajudem... vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Às vezes é mais vantajoso não usar o campo timestamp e sim um campo date e um campo time...

 

Então, já que você tem, aparentemente, esta necessidade, talvez fosse bom gravar data e hora separadamente...

 

Estes exemplos mostram como lidar com esses campos separadamente (o que facilitaria a simplificação das suas consultas):

 

Seja a tabela de acessos:create table `acme`.`acessos`(idacessos integer unsigned not null auto_increment,usuario varchar(05),data date,hora time,primary key (`idacessos`))engine = InnoDB;Contendo estes dados, para um suposto usuario 001:14/01/2007 10:55:0116/01/2007 21:15:0028/01/2007 18:00:1013/02/2007 14:00:0028/02/2007 10:00:0013/03/2007 22:50:1714/04/2007 10:00:2014/04/2007 16:55:0014/04/2007 22:50:1917/08/2007 14:55:20Então:select usuario, data, horafrom `acme`.`acessos`where usuario="00001"order by usuario, data, horaResulta emusuario data hora00001 14/01/2007 10:55:0100001 16/01/2007 21:15:0000001 28/01/2007 18:00:1000001 13/02/2007 14:00:0000001 28/02/2007 10:00:0000001 13/03/2007 22:50:1700001 14/04/2007 10:00:2000001 14/04/2007 16:55:0000001 14/04/2007 22:50:1900001 17/08/2007 14:55:20Agora, quero listar os acessos do usuario  00001entre os dias 01/02/2007 e 31/05/2007,desde que feitos entre 18:00:00 e 23:59:59Então:select usuario, data, horafrom `acme`.`acessos`where usuario="00001"  and data between '2007/02/01' and '2007/05/31'  and hora between '18:00:00' and '23:59:59'order by usuario, data, horaQue resulta emusuario data hora00001 13/02/2007 14:00:0000001 14/04/2007 22:50:19

Com o campo timestamp, será preciso dar um pouquinho mais de complexidade à query, usando as funções para extrair a data e a hora separadamente e compara-las na clausula where.......

 

Mas... o que você deseja realmente? pode dar um exemplo? (assim: preciso saber quantas vezes o usuario acessou o sistema... ou quem acessou o sistema entre os dias tais e tais e entre tais e tais horas...?) seria por aí?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Às vezes é mais vantajoso não usar o campo timestamp e sim um campo date e um campo time...Então, já que você tem, aparentemente, esta necessidade, talvez fosse bom gravar data e hora separadamente...Estes exemplos mostram como lidar com esses campos separadamente (o que facilitaria a simplificação das suas consultas):

Seja a tabela de acessos:create table `acme`.`acessos`(idacessos integer unsigned not null auto_increment,usuario varchar(05),data date,hora time,primary key (`idacessos`))engine = InnoDB;Contendo estes dados, para um suposto usuario 001:14/01/2007 10:55:0116/01/2007 21:15:0028/01/2007 18:00:1013/02/2007 14:00:0028/02/2007 10:00:0013/03/2007 22:50:1714/04/2007 10:00:2014/04/2007 16:55:0014/04/2007 22:50:1917/08/2007 14:55:20Então:select usuario, data, horafrom `acme`.`acessos`where usuario="00001"order by usuario, data, horaResulta emusuario data hora00001 14/01/2007 10:55:0100001 16/01/2007 21:15:0000001 28/01/2007 18:00:1000001 13/02/2007 14:00:0000001 28/02/2007 10:00:0000001 13/03/2007 22:50:1700001 14/04/2007 10:00:2000001 14/04/2007 16:55:0000001 14/04/2007 22:50:1900001 17/08/2007 14:55:20Agora, quero listar os acessos do usuario  00001entre os dias 01/02/2007 e 31/05/2007,desde que feitos entre 18:00:00 e 23:59:59Então:select usuario, data, horafrom `acme`.`acessos`where usuario="00001"  and data between '2007/02/01' and '2007/05/31'  and hora between '18:00:00' and '23:59:59'order by usuario, data, horaQue resulta emusuario data hora00001 13/02/2007 14:00:0000001 14/04/2007 22:50:19
Com o campo timestamp, será preciso dar um pouquinho mais de complexidade à query, usando as funções para extrair a data e a hora separadamente e compara-las na clausula where.......Mas... o que você deseja realmente? pode dar um exemplo? (assim: preciso saber quantas vezes o usuario acessou o sistema... ou quem acessou o sistema entre os dias tais e tais e entre tais e tais horas...?) seria por aí?Abraços!
Paulo do Brasil, eu também acho bem mais fácil se fosse separados, mas este banco é assim e não tem como mudar, porque ele guarda os acessos de todos os ip's aqui de onde eu trabalho... mas de qualquer forma eu consegui fazer... veja o código abaixo:
SELECT DATE_FORMAT(date, '%d/%m/%Y %H:%i:%s') AS date, host , REVERSE(SUBSTRING(REVERSE(url ), instr(REVERSE(url ), '/' ), 999 )) AS aux, 		SUM(bytes) AS bytes_total, SUM(elapsed) AS time_total, GROUP_CONCAT(SUBSTRING_INDEX(url, '/', -1)) AS arquivosFROM loggerWHERE date BETWEEN '$data1_sql 00:00:00' AND '$data2_sql 23:59:59' and 		   REVERSE(SUBSTRING_INDEX(REVERSE(date ), ' ' , 1 )) >= '$horario1' and 		   REVERSE(SUBSTRING_INDEX(REVERSE(date ), ' ' , 1 )) <= '$horario2'
e parece que funcionou... vlw... abraço

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.