Ir para conteúdo

POWERED BY:

Arquivado

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

PPD

Selecionar período de hora no banco mysql com php (programa de rádio)

Recommended Posts

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

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

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

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

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

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

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

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

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

×

Informação importante

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