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.
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.