Penso di aver risolto cosi, dovrebbe essere corretto
codice:SELECT * FROM sconti WHERE id_hotel=20 AND letto=3 AND ('2022-12-15' >= date_start_discount OR '2022-12-22' < date_end_discount) AND '8' BETWEEN da_anni and a_anni
Penso di aver risolto cosi, dovrebbe essere corretto
codice:SELECT * FROM sconti WHERE id_hotel=20 AND letto=3 AND ('2022-12-15' >= date_start_discount OR '2022-12-22' < date_end_discount) AND '8' BETWEEN da_anni and a_anni
Ciao,
non sono del tutto d'accordo.
Se hai uno sconto che va dal 01/12 al 03/12 estrarresti lo stesso quella riga, perché con l'OR fallirebbe il check sulla data di inizio ma sarebbe OK quello della data fine, ma a te non interesserebbe.
Io farei invece così:
Record 1:codice:SELECT * FROM sconti WHERE id_hotel=20 AND letto=3 AND (data_start_discount <= '2022-12-22' AND date_end_discount >= '2022-12-15') AND '8' BETWEEN da_anni and a_anni
1) date_start_discount: 2022-12-04
2) date_end_discount: 2022-12-18
3) sconto: 30
Record 2:
1) date_start_discount: 2022-12-19
2) date_end_discount: 2022-12-31
3) sconto: 35
Record 3:
1) date_start_discount: 2022-12-01
2) date_end_discount: 2022-12-03
3) sconto: 25
Record 4:
1) date_start_discount: 2022-12-23
2) date_end_discount: 2022-12-25
3) sconto: 10
Con la query che ti ho scritto, prenderesti solo il Record1 ed il Record 2 (perché ricadono nell'intervallo di prenotazione), scartando record 3 e 4