MY SQL - Verificando Disponibilidade

1 resposta
Helder_Ribeiro

Pessoal queria saber se tem jeito de eu verificar a disponibilidade nessa tabela evento.
Tipo:
Antes de eu inserir um registro, verificar se tem um evento nesta data e no intervalo de hora.
A principio pensei que era simples mais, infelizmente eu estava muito errado.
Essa SQL é apenas o inicio:

// A dataInicio, dataFim, horaInicio e horaFim será o sistema que passará como parâmetro.   
//Estou usando COUNT pq se a quantidade for igual a 0 posso inserir, caso contrário não pode inserir.  
  
SELECT count(*) FROM evento   
where dataInicio >= '2009-12-03' and dataFim <= '2009-12-03'   
and horaInicio > '12:00' and horaFim < '13:00'; 


//Estrutura da Tabela Evento
CREATE TABLE `evento` (
  `codigo` int(10) unsigned NOT NULL auto_increment,
  `dataInicio` date default NULL,
  `dataFim` date default NULL,
  `horaFim` varchar(6) default NULL,
  `descricao` text,
  `horaInicio` varchar(6) NOT NULL,
  PRIMARY KEY  (`codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

Desde já grato por qualquer ajuda.

1 Resposta

pmlm

Pra começar, penso que será melhor utilizar um campo DATETIME para data_hora_inicio e data_hora_fim. Simplifica o SQL quando o evento ocorrer em mais do que um dia.

Em relação ao SQL em concreto, se queres saber se algum evento entra em conflito, tens de saber se:

  • um outro evento começa durante o intervalo do teu evento
  • um outro evento termina durante o intervalo do teu evento
  • um outro evento começou antes do teu evento e vai terminar depois

SELECT count(*) FROM evento WHERE (data_hora_inicio BETWEEN '2009-12-03 12:00' AND '2009-12-03 13:00') OR (data_hora_fim BETWEEN '2009-12-03 12:00' AND '2009-12-03 13:00') OR (data_hora_inicio <= '2009-12-03 12:00' AND data_hora_fim >= '2009-12-03 13:00')

Criado 2 de dezembro de 2009
Ultima resposta 2 de dez. de 2009
Respostas 1
Participantes 2