Трябва да призная, че е обезсърчително да се опитате да разплетете тази заявка, за да разберете логиката зад нея, но мисля, че следната заявка трябва да върне резултатите, от които се нуждаете.
{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;
Почти съм сигурен, че това е логически еквивалентно и веднъж изразено в опростена форма като тази, е по-лесно да видите как можете да го накарате да върне и допълнителния времеви интервал.
Трябва да имате отделна заявка, която да използвате, когато попълвате времевите интервали за нова резервация, която няма съществуващ времеви интервал, в който случай можете просто да премахнете единичния ред t.id = '{fab_booking___book_starttime}' OR
.