Disponibilidade de quartos

MySQL

11/12/2012

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

Curtidas 0

Respostas

William

William

11/12/2012

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!
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

11/12/2012

Vai ser fixo o período de 45 dias, ou poderá variar?
GOSTEI 0
Luis Carlos

Luis Carlos

11/12/2012

Obrigado pela atenção.

Será fixo para 45 dias.

As datas que eu quero pegar

data inicial = hoje

data final = hoje + 45 dias

Luis
GOSTEI 0
Felipe Ribeiro

Felipe Ribeiro

11/12/2012

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)
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

11/12/2012

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()
GOSTEI 0
Luis Carlos

Luis Carlos

11/12/2012

Desculpa pela demora na resposta.

Claudiadnh,

Funcionou perfeitamente.

Muito Obrigado
GOSTEI 0
POSTAR