Disponibilidade de quartos
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
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
Curtidas 0
Respostas
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!
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
11/12/2012
Vai ser fixo o período de 45 dias, ou poderá variar?
GOSTEI 0
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
Será fixo para 45 dias.
As datas que eu quero pegar
data inicial = hoje
data final = hoje + 45 dias
Luis
GOSTEI 0
Felipe Ribeiro
11/12/2012
Acho que isso vai te ajudar...
Qualquer dúvida estamos aí.. (y)
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
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:
E depois pra chamar:
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
11/12/2012
Desculpa pela demora na resposta.
Claudiadnh,
Funcionou perfeitamente.
Muito Obrigado
Claudiadnh,
Funcionou perfeitamente.
Muito Obrigado
GOSTEI 0