sql >> Database >  >> RDS >> Mysql

Vervolgkeuzelijst met samenvoegquery

Ik moet toegeven dat het ontmoedigend is om te proberen die query te ontwarren om de logica erachter te begrijpen, maar ik denk dat de volgende query de resultaten moet opleveren die je nodig hebt.

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

Ik ben er vrij zeker van dat dit logisch equivalent is, en eenmaal uitgedrukt in een vereenvoudigde vorm als deze, is het gemakkelijker om te zien hoe je het kunt krijgen om ook het extra tijdvak terug te geven.

U moet een aparte query hebben om te gebruiken bij het invullen van de tijdvakken voor een nieuwe boeking die geen bestaand tijdvak heeft. In dat geval kunt u de enkele regel t.id = '{fab_booking___book_starttime}' OR .




  1. Hoe kan ik een transactie-impasse opheffen?

  2. Snelste manier om door een grote tabel te bladeren met JDBC

  3. Hoe WEEKOFYEAR() werkt in MariaDB

  4. Fix "ERROR 1222 (21000):de gebruikte SELECT-instructies hebben een ander aantal kolommen" bij gebruik van UNION in MariaDB