sql >> Databáze >  >> RDS >> Mysql

Rozbalovací seznam se sjednocovacím dotazem

Musím přiznat, že je skličující pokoušet se tento dotaz rozmotat, abychom pochopili logiku za ním, ale myslím si, že následující dotaz by měl vrátit výsledky, které potřebujete.

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

Jsem si docela jistý, že je to logicky ekvivalentní, a jakmile je to vyjádřeno ve zjednodušené formě, jako je tato, je snazší vidět, jak můžete dosáhnout toho, aby také vrátil další časový úsek.

Při vyplňování časových úseků pro novou rezervaci, která nemá existující časový úsek, byste měli mít samostatný dotaz. V takovém případě stačí odstranit jeden řádek t.id = '{fab_booking___book_starttime}' OR .




  1. Optimalizujte dotazy MySQL pomocí mnoha LEFT JOINů a GROUP BY

  2. Zadávání dat z formuláře do databáze PDO

  3. Turecké znaky se nezobrazují správně

  4. Co je nového v MariaDB MaxScale 2.4