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
.