Piszę system rezerwacji hoteli. Po wielu studiuje (w tym przepełnienie stosu) Napisałem to sql, aby dowiedzieć się wolne pokoje:Sprawdzanie konfliktów zakresu dat w MySQL
SELECT
*
FROM room
WHERE
room_id NOT IN (
SELECT room_id
FROM bookings
WHERE
checkin <= '$check_in'
AND checkout >= '$check_out'
)
ale problemem jest to jej nie rozważa sprawdzanie czas 12:00:00 i kasa jest 11:59:00
również nie podaje właściwych zapytań, np. W zakresie dat nie działa tak, jakbym zarezerwował od 15-18 jednoosobowy pokój, którego numer to 501. jeśli ponownie uruchomię zapytanie 17-19, to pokoje wydają się darmowe, ale w rzeczywistość powinna być zajęta.
każdy może zaproponować bardzo dobry i skuteczny sql, który otrzyma dokładną datę, aby nie doszło do zderzenia systemu rezerwacyjnego, ponieważ system zostanie wdrożony w rzeczywistości, więc błędy spowodują wiele problemów.
góry dzięki
Cześć, dziękuję za odpowiedź. Czy możesz napisać makiety sql, dzięki czemu mogę śledzić, bo nie jestem zbyt dobry w pisaniu sql (mysql dokładnie) dzięki jeszcze raz –
to dobry połów! To zapytanie sprawdza oba końce zakresu, ale co z środkowym? Innymi słowy, załóżmy, że klient próbował zarezerwować pokój na 4 noce, ale został już zarezerwowany na jedną noc w środku? Rezerwacja checkin byłaby większa niż żądana check_in $, a rezerwacja checkout byłaby mniejsza niż żądanie check_out $, ale pokój jest niedostępny .... prawda? – Aerik
@Aerik To dobry chwyt - zaktualizuję odpowiedź odpowiednio. –