PPD 0 Denunciar post Postado Agosto 23, 2013 Boa tarde a todos. Preciso de uma ajuda aqui da comunidade. estou fazendo um sistema para o site de uma rádio, porem estou com dificuldades no seguinte ponto.tenho salvo no banco de dado a hora de inicio e fim do programa no formato hh:mm (11:45). preciso de uma rotina em mysql, que possa ser usado no php, que a partir da hora do servidor retorne o programa ( registro do banco ) onde a data do servidor seja maior que a data de inicio e menor que a data de fim. os campos que armazenam a hora de inicio e fim são separados. Obrigado pela atenção. Compartilhar este post Link para o post Compartilhar em outros sites
Cacilds 18 Denunciar post Postado Agosto 23, 2013 Olá, PPD, Não entendi muito bem a aplicação, mas basicamente você quer saber a hora que está no servidor, correto? No MySQL você pode resgatar das seguintes formas: SELECT NOW() //2013-08-23 14:07:43 SELECT CURRENT_DATE; //2013-08-23 SELECT CURRENT_TIME; //14:07:54 []'s Compartilhar este post Link para o post Compartilhar em outros sites
PPD 0 Denunciar post Postado Agosto 23, 2013 Bom nao é bem isso que preciso.tenho no banco de dados toda a programação da rádio, com a hora de inicio e fim de cada programa. _______________________________________ | hora_inicio | hora_fim | nome_programa | -------------------------------------------------------------- | 12:15 | 16:00 | Show de sucessos | | 16:00 | 17:30 | Só musicas | | 17:30 | 18:10 | Mesa Redonda | --------------------------------------------------------------- preciso de uma rotina que me retorne o nome_programa que esta no ar no momento da consulta Compartilhar este post Link para o post Compartilhar em outros sites
Cacilds 18 Denunciar post Postado Agosto 23, 2013 Vejamos se entendi, seria isto ? : DELIMITER // CREATE FUNCTION getProgramaAtual() RETURNS VARCHAR(100) BEGIN DECLARE nomePrograma VARCHAR(100); SELECT nome_programa FROM radio WHERE CURRENT_TIME BETWEEN hora_inicio AND hora_final INTO nomePrograma; RETURN nomePrograma; END // DELIMITER ; SELECT getProgramaAtual(); Compartilhar este post Link para o post Compartilhar em outros sites
PPD 0 Denunciar post Postado Agosto 23, 2013 não sei se vai dar pra usar o BETWEEN, serial algo mais assim $hora_servidor = date('h:i'); // 15:30 SELECT nome_programa FROM radio WHERE (hora_inicio < $hora_servidor) AND (hora_fim > $hora_servidor) Problema resolvido. somente alterei o tipo dos campos para TIME . então a consulta a seguir funcionou. Obrigado Cacilds pela sua ajuda. SELECT nome_programa FROM radio WHERE (hora_inicio < $hora_servidor) AND (hora_fim > $hora_servidor) Compartilhar este post Link para o post Compartilhar em outros sites
Cacilds 18 Denunciar post Postado Agosto 23, 2013 Creio que o mais ideal seja o BETWEEN, PPD.E, veja bem, em sua tabela você está dizendo que um programa acaba às 16:00 e o outro inicia às 16:00,caso eu acesse seu site exatamente as 16:00, qual programação devo exibir?O correto seria gravar no banco 16:00:00, assim sendo, às 16:00:01 já não estou mais entre(BETWEEN) o horário da programação que se encerra às 16:00:00.O resultado fazendo isto: SELECT nome_programa FROM radio WHERE (CURRENT_TIME >= hora_inicio ) AND (CURRENT_TIME <= hora_final) É o mesmo que este: SELECT nome_programa FROM radio WHERE CURRENT_TIME BETWEEN hora_inicio AND hora_final Só que mais.. "elegante", vamos dizer assim.Se for pegar a hora com o PHP você pode pegar a hora com a função date, como mencionou. Compartilhar este post Link para o post Compartilhar em outros sites
PPD 0 Denunciar post Postado Agosto 24, 2013 Funcionou certinho também. Show de bola. Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Jaques 0 Denunciar post Postado Dezembro 1, 2014 Desculpa reviver esse tópico, no entanto tenho um problema similar a este e até agora não encontrei solução. O meu caso é parecido, mas preciso selecionar um período entre horas de um dia para outro. Digamos que o período que quero selecionar seja das 14 às 20. O sistema funciona perfeitamente, mas se quero selecionar um período das 20 às 04 (da madrugada) o sistema falha. Digamos que a hora atual seja 22: SELECT nome_programa FROM radio WHERE (22 >= 20) AND (22<= 04) resultado: falha, pois 22 é maior que 04 e não menor. Digamos agora que a hora atual seja 02: SELECT nome_programa FROM radio WHERE (02>= 20) AND (02<= 04) resultado: falha, pois 02 é menor que 20 . Já tentei com BETWEEN e o resultado é o mesmo. No banco está setado como TIME... Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 1, 2014 Na realidade são dois intervalos ( (data = '01/12/2014' and hora between '20:00' and '23:59' and data = '02/12/2014' and hora between '00:00' and '04:00') ) Sem levar em conta formatos de data e hora todavia , só a ideia básica. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Jaques 0 Denunciar post Postado Dezembro 1, 2014 Exatamente! Obrigado pela resposta, eu cheguei na mesma conclusão a pouco tempo. No entanto, estou com dificuldades na hora de imprimir os dados, queria que aparecessem todos como se fossem a extensão do mesmo dia. Veja em ação como está atualmente: http://ffood.com.br/cadastro_gratis.php (bem embaixo do formulário) Queria imprimir os dados assim: Segunda feira - Aberto das 20:00 às 02:00 Compartilhar este post Link para o post Compartilhar em outros sites