Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875

    Mysql estrarre i record tra 2 date specifiche

    Buongiorno
    avrei bisogno di estrarre lo sconto del terzo letto di un bambino di 8 anni da una tabella dove ipotizzo che l'hotel possa cambiare la scontistica tra un'offerta e l'altra.
    Nel database ho inserito 2 record di prova:
    il primo record ha i seguenti valori:
    1) date_start_discount: 2022-12-04
    2) date_end_discount: 2022-12-18
    3) sconto: 30

    il secondo record ha i seguenti valori:
    1) date_start_discount: 2022-12-19
    2) date_end_discount: 2022-12-31
    3) sconto: 35

    in pratica sto ipotizzando che questo hotel dal 4 al 18 dicembre ha uno sconto del 30% per i bambini mentre dal 19 al 31 dicembre ha uno sconto del 35%

    Adesso vorrei estrarre questi 2 record ipotizzando una ricerca dell'utente dal 15 al 22 dicembre e quindi a cavallo di 2 offerte, in pratica dovrò calcolare 3 giorni al 30% e 4 giorni al 35%.

    Sto provando cosi ma non mi estrae niente, dove sbaglio?
    Grazie

    codice:
    SELECT * FROM sconti WHERE id_hotel=20
    AND letto=3
    AND '2022-12-15' >= date_start_discount
    AND '2022-12-22' < date_end_discount
    AND '8' BETWEEN da_anni and a_anni

  2. #2
    Utente di HTML.it L'avatar di allin81
    Registrato dal
    Mar 2011
    Messaggi
    1,875
    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

  3. #3
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da allin81 Visualizza il messaggio
    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ì:

    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
    Record 1:
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.