Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Dropdown mit Union-Abfrage

Ich muss zugeben, dass es entmutigend ist, diese Abfrage zu entwirren, um die Logik dahinter zu verstehen, aber ich denke, dass die folgende Abfrage die Ergebnisse liefern sollte, die Sie benötigen.

{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;

Ich bin mir ziemlich sicher, dass dies logisch äquivalent ist, und einmal in einer vereinfachten Form wie dieser ausgedrückt, ist es einfacher zu sehen, wie Sie es dazu bringen können, auch das zusätzliche Zeitfenster zurückzugeben.

Sie sollten eine separate Abfrage haben, die Sie verwenden können, wenn Sie die Zeitfenster für eine neue Buchung ausfüllen, die kein vorhandenes Zeitfenster hat. In diesem Fall können Sie einfach die einzelne Zeile t.id = '{fab_booking___book_starttime}' OR .