PDA

View Full Version : [SQL] Query per assegnazione camere albergo


magnus77
29-10-2011, 08:42
Ciao ragazzi,
mi date un consiglio?

Dovrei realizzare una query che mi permetta di selezionare le camere libere di un albergo.

Ho realizzato la seguente:

SELECT *
FROM camere
WHERE id NOT IN (
SELECT id_camera_assegnata
FROM
prenotazioni
WHERE (
('2011-10-30' > data_arrivo AND '2011-10-30' < data_partenza) OR
('2011-11-01' > data_arrivo AND '2011-10-01' < data_partenza)
) AND id_tipo_camera='1' AND flag_conclusa='Y'
)
AND id_tipo_camera='1'

Ma non sembra funzionare correttamente. Mi date una mano?

Questa è la struttura delle tabelle:

CREATE TABLE `camere` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`descrizione` VARCHAR(50) NOT NULL,
`id_tipo_camera` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE `prenotazioni` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`data_arrivo` DATE NULL DEFAULT NULL,
`data_partenza` DATE NULL DEFAULT NULL,
`id_tipo_camera` INT(11) NULL DEFAULT NULL,
`totale_iva_esclusa` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
`totale` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
`totale_iva` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
`saldato` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
`id_tipo_pagamento` INT(10) UNSIGNED NULL DEFAULT NULL,
`ora_arrivo` VARCHAR(10) NULL DEFAULT NULL,
`note` VARCHAR(500) NULL DEFAULT NULL,
`id_camera_assegnata` INT(10) NULL DEFAULT NULL,
`id_soggetto` INT(11) NULL DEFAULT NULL,
`id_numero_ospiti` INT(10) NOT NULL,
`flag_conclusa` VARCHAR(1) NOT NULL DEFAULT 'N',
`timestamp` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`id_sessione` VARCHAR(25) NULL DEFAULT NULL,
`id_trattamento` INT(10) UNSIGNED NOT NULL,
`id_stato_prenotazione` INT(10) NOT NULL DEFAULT '1',
`totale_camera` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
`totale_iva_esclusa_camera` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
`totale_iva_camera` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
`totale_servizi_extra` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
`totale_iva_esclusa_servizi_extra` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
`totale_iva_servizi_extra` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
`eseguito_check_out` VARCHAR(1) NOT NULL DEFAULT 'N',
`data_check_out` DATETIME NULL DEFAULT NULL,
`residuo_pagare` DECIMAL(10,2) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `FK_prenotazioni_soggetti` (`id_soggetto`),
INDEX `FK_prenotazioni_tipi_camere` (`id_tipo_camera`),
CONSTRAINT `FK_prenotazioni_soggetti` FOREIGN KEY (`id_soggetto`) REFERENCES `soggetti` (`id`),
CONSTRAINT `FK_prenotazioni_tipi_camere` FOREIGN KEY (`id_tipo_camera`) REFERENCES `tipi_camere` (`id`)
)

CREATE TABLE `tipi_camere` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`descrizione` VARCHAR(50) NOT NULL,
`totale_iva_esclusa_default` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
`totale_iva_default` DECIMAL(10,2) UNSIGNED NULL DEFAULT '0.00',
`totale_default` DECIMAL(10,2) UNSIGNED NULL DEFAULT '0.00',
`numero_massimo_ospiti` INT(10) UNSIGNED NOT NULL,
`id_codice_iva` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)

Considerate che il giorno di partenza è da considerarsi libero poichè il cliente lascia la camera.

Ciao.

starfred
29-10-2011, 09:52
ciao, generalmente con le date si usa il costrutto BETWEEN, comunque il mio consiglio è quello di usare il formato ISO standard.
Nel tuo caso comunque manca inizialmente il formato della data
SET DATEFORMAT ymd.