sql >> Databasteknik >  >> RDS >> Mysql

Dropdown med facklig fråga

Jag måste erkänna att det är skrämmande att försöka reda ut den frågan för att förstå logiken bakom den, men jag tror att följande fråga bör returnera de resultat du behöver.

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

Jag är ganska säker på att detta är logiskt likvärdigt, och när det väl uttrycks i en förenklad form som denna är det lättare att se hur du kan få det att även returnera den extra tidsluckan.

Du bör ha en separat fråga att använda när du fyller i tidsluckor för en ny bokning som inte har en befintlig tidslucka, i så fall kan du bara ta bort den enda raden t.id = '{fab_booking___book_starttime}' OR .




  1. SQL en numreringskolumn - MySQL

  2. Standardnamn för MySQL-databas

  3. Hur man omdefinierar kolumner som returneras av en lagrad procedur i SQL Server

  4. Hur man testar för överlappande datum i PostgreSQL