Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Lista suspensa com consulta de união


Eu tenho que admitir que é assustador tentar desembaraçar essa consulta para entender a lógica por trás dela, mas acho que a consulta a seguir deve retornar os resultados que você precisa.
{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;

Tenho certeza de que isso é logicamente equivalente e, uma vez expresso em uma forma simplificada como essa, é mais fácil ver como você pode fazer com que também retorne o intervalo de tempo adicional.

Você deve ter uma consulta separada para usar ao preencher os intervalos de tempo para uma nova reserva que não tenha um intervalo de tempo existente. Nesse caso, basta remover a única linha t.id = '{fab_booking___book_starttime}' OR .