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
.