Mysql
 sql >> Database >  >> RDS >> Mysql

Menu a discesa con query di unione

Devo ammettere che è scoraggiante provare a districare quella query per capire la logica dietro di essa, ma penso che la seguente query dovrebbe restituire i risultati di cui hai bisogno.

{thistable}.id IN (
    /*Finds booking slots where the booking slot does not overlap
      with any of the existing bookings on that day, 
      or where the booking slot id is the same as the current slot.*/
    SELECT t.id + 3
    FROM fab_booking_slots AS t 
    WHERE t.id = '{fab_booking___book_starttime}'
    OR NOT EXISTS (
        Select 1 
        From  fab_booking_taken AS p1
        Where Date(p1.book_date) = Date('{fab_booking___book_bookingdate}')
        And p1.book_end > t.heuredepart_resa 
        And p1.book_start < t.heurearrivee_resa
    )
)
Order By id Asc;

Sono abbastanza sicuro che questo sia logicamente equivalente e, una volta espresso in una forma semplificata come questa, è più facile vedere come puoi farlo restituire anche la fascia oraria aggiuntiva.

Dovresti avere una query separata da utilizzare quando riempi le fasce orarie per una nuova prenotazione che non ha una fascia oraria esistente, nel qual caso puoi semplicemente rimuovere la singola riga t.id = '{fab_booking___book_starttime}' OR .