Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Menu z zapytaniem składającym

Muszę przyznać, że próba rozwikłania tego zapytania, aby zrozumieć logikę za nim stojącą, jest zniechęcająca, ale myślę, że następne zapytanie powinno zwrócić wyniki, których potrzebujesz.

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

Jestem prawie pewien, że jest to logicznie równoważne, a po wyrażeniu w tak uproszczonej formie łatwiej jest zobaczyć, jak można to uzyskać, aby zwrócić również dodatkowy przedział czasowy.

Powinieneś mieć oddzielne zapytanie do użycia podczas wypełniania przedziałów czasowych dla nowej rezerwacji, która nie ma istniejącego przedziału czasowego, w takim przypadku możesz po prostu usunąć pojedynczy wiersz t.id = '{fab_booking___book_starttime}' OR .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawić, by dostęp do bazy danych za pomocą Hibernate JPA był bezpieczny wątkowo?

  2. MYSQL i innoDB zmieniają dynamicznie AUTO_INCREMENT tabeli

  3. SELECT / GROUP BY - sekwencja wartości

  4. wyświetl wartość bazy danych w ramce modalnej wyświetla tylko pierwszy rekord

  5. Jak ukryć ciąg połączenia MySQL — nazwa użytkownika i hasło w serwisie GitHub (Java)