Fórum Disponibilidade de quartos #430835

11/12/2012

0

Como consigo montar esse select:

Tabelas - Reserva - dataentrada - Date
datasaida - Date
Tipo_Apto - Int


TipoApto - nome - varchar
quantidade - int



Dados da tabela Reserva

Nome dataentrada datasaida tipoapto
joao 12-12-2012 15-12-2012 1
Luis 12-12-2012 13-12-2012 1


Dados da tabela tipoSuite

tipo_apto nome Quantidade_apto
1 Single 2
2 Double 3



Como montar um select que me retorne a disponibilidade do num periodo de 45 dias.

11-12-2012 12-12-2012 13-12-2012 14-12-2012 15-12-2012 16-12-2012 17-12-2012....................

Single 2 0 1 1 2 2 2

DOUBLE 3 3 3 3 3 3 3


Obrigado










Luis Carlos

Luis Carlos

Responder

Posts

11/12/2012

William

Colega explica um pouco melhor sua dúvida, sobre quais datas vc quer pegar essa diferença?

Sempre dá para montar uma instrução SQL que atenda suas necessidades, precisa só saber organizar as informações do filtro!
Responder

Gostei + 0

12/12/2012

Claudia Nogueira

Vai ser fixo o período de 45 dias, ou poderá variar?
Responder

Gostei + 0

12/12/2012

Luis Carlos

Obrigado pela atenção.

Será fixo para 45 dias.

As datas que eu quero pegar

data inicial = hoje

data final = hoje + 45 dias

Luis
Responder

Gostei + 0

12/12/2012

Felipe Ribeiro

Acho que isso vai te ajudar...



select 
	* 
from 
	Reserva 
where 
	DATE_FORMAT(data_inicial,'%Y-%m-%d') = curdate() and 
	DATE_FORMAT(data_final,'%Y-%m-%d') <= date_add(curdate(), interval 45 day) 



Qualquer dúvida estamos aí.. (y)
Responder

Gostei + 0

12/12/2012

Claudia Nogueira

Luis só conseguir fazer tudo isso que você quer usando somente SQL, criando uma procedure.
Então eu criei a procedure assim:
DELIMITER \
CREATE PROCEDURE QUARTOS_DISPONIVEIS()
BEGIN
DECLARE data_inicial DATE DEFAULT CURDATE();
DECLARE data_final DATE DEFAULT CURDATE();
SET data_final = (SELECT DATE_ADD(CURDATE(), INTERVAL 45 DAY));

DROP TEMPORARY TABLE IF EXISTS TMP;
CREATE TEMPORARY TABLE tmp (data date, nome varchar(100), quantidade int);

WHILE data_inicial <= data_final DO
INSERT INTO TMP (data, nome, quantidade)
(SELECT a.data,
        t.nome, 
        t.quantidade - COALESCE((SELECT count(id_reserva) 
                                   FROM reserva r 
                                  WHERE (r.tipo_apto = t.tipo_apto) 
                                    AND (a.data >= r.dataentrada) 
                                    AND (a.data <= r.datasaida)),0) reservado
  FROM (SELECT (SELECT data_inicial) data) a, tipoapto t);

    SET data_inicial = (SELECT DATE_ADD(data_inicial, INTERVAL 1 DAY));
END WHILE;
SELECT * FROM TMP;
END;


E depois pra chamar:

CALL QUARTOS_DISPONIVEIS()
Responder

Gostei + 0

15/12/2012

Luis Carlos

Desculpa pela demora na resposta.

Claudiadnh,

Funcionou perfeitamente.

Muito Obrigado
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar