Salve,
ho problemi a scrivere una query che con il supporto alle subquery sarebbe sempliciotta ma che in mysql 4.0.x non e' supportata.
Scenario: le tabelle interessate sono
camere( camere associate ad ogni offerta - allotment )
+----+--------+--------------+
| id | camera | id_allotment |
+----+--------+--------------+
prenotazioni ( effettuate dai clienti )
+----+-----------+-----+----+--------------+----------------+
| id | id_camera | dal | al | id_allotment | data_emissione |
+----+-----------+-----+----+--------------+----------------+
A titolo informativo c'è la tabella allotment che non e' coinvolta nella query.
Allora, la entry in camere potrebbero essere le seguenti:
(0, 1, 1)
(1, 2, 1)
(2, 3, 2)
In prenotazioni invece ci potrebbero essere la seguente entry:
(0, 1, 10/02/2005, 14,02,2005, 1, 10/01/2005)
(0, 1, 19/02/2005, 19,02,2005, 1, 10/01/2005)
Adesso io ipotizzo che l'utente abbia inserito le sue informazioni
per prenotare una camere relativa all'allotment 1, dal 15 al 17.
Il metodo per effettuare la ricerca e' il seguente:
1. cerco in `prenotazioni` tutte quelle per camere relative allo stesso allotment prenotate per un periodo che s'interseca con quello richiesto dall'utente: queste sono le camere che *non* posso scegliere
2. cerco in `camere` gli allotment l'identificativo di tutte le camere che non compaiono nella query al passo 1.
In SQL la query dovrebbe essere ( più o meno ) una cosa del genere:
a=giorno di ingresso in camera voluto dall'utente
b=giorno di uscita dalla camera
select id from camere where id not in
( select * from prenotazioni where id_allotment=1 and
( ( a>dal and a<al ) or ( a>dal and a<al ) );
Cosa dovrebbe succedere:
la condizione della II query impone che siano scelte tutte le entry con l'intervallo temporale accavallato a quello che mi interessa; nel caso in cui non ce ne siano ottengo un insieme vuoto e quindi la query esterna mi ritornerebbe tutte le camere, potendone scegliere quindi una a piacere.
Adesso non potendo usufruire della subqueries, non sono riuscito a creare una query equivalente con left join come suggerisce il manuale mysql; lo scenario che me la fa fallire e' quello nel quale la seconda query torna
l'insieme vuoto, perche' essendo una join....
Qualcuno saprebbe aiutarmi ?
Grazie,
j0k3r