![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
resFrom i resTo w bazie danych zawierają datę rezerwacji (od, do)
analogicznie zmienne $this->resFrom i $this->resTo zawierają również datę rezerwacji dla danego obiektu Poblem: Zapytanie ma sprawdzić czy istnieją już jakieś rezerwacje w tym terminie - po prostu czy termin jest wolny i nie koliduje z innymi rezerwacjami. Jeżeli znajdzie jakąś rezerwację to zwróci dla niej resID i resztę zrobi już skrypt. Czy poniższe zapytanie bierze pod uwagę wszystkie możliwości? Czy przy jakichś warunkach brzegowych będzie działało nie prawidłowo?
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Moze troche nie na temat, ale nie mogę zrozumiec Twojego zapytania. Mozesz mi slownie opisac kazdy z warunkow co robi oraz co robi kazda z grupy warunków (grupa - warunki w nawiasie). Albo może nie tyle co robi, ale co ty chcesz by robila.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
W bazie mam taką tabelę:
I są w niej różne wpisy dotyczące rezerwacji: od jakiejś daty do jakiejś daty (godziny nie istotne). W kodzie tworzony jest obiekt klasy 'Reservation', który ma zmienne resFrom i resTo odpowiadające nowej rezerwacji. Gdy na tym obiekcie dokonuje się metody save(), która odpowiada za zapis obiektu do bazy danych to muszę najpierw sprawdzić czy daty rezerwacji z bieżącego obiektu nie nakładają się na już zarezerwowane terminy. By to sprawdzić chcę pobrać z bazy resID tych rezerwacji, które termin podanym w obiekcie zarezerwowały wcześniej. (Jak zapytanie coś zwróci to znaczy, że termin jest zajęty). Jeszcze ważna rzecz, że jeżeli rezerwacja kończy się danego dnia to tego samego dnia może zacząć się następna. Przykład rezerwacja 1: 10.04.2010 do 16.04.2010 rezerwacja 2: 3.04.2010 do 10.04.2010 rezerwacja 3: 18.04.2010 do 25.04.2010 Jak widać rezerwacja 2 kończy się 10.04, a rezerwacja 1 zaczyna 10.04 i jest to w porządku. Teraz stworzony został obiekt z rezerwacją od 17.04.2010 - 20.04.2010, taki termin nie może zostać zarezerwowany, bo koliduje z inną rezerwacją (z rezerwacja 3). Na podstawie danych z obiektu pobieram z bazy kolidujące z nią terminy, jak coś zostanie pobrane to znaczy, że termin jest już zajęty, jak nie zwróci to wszystko jest ok. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Start i koniec 'nowej' imprezy musi być przed startem, lub po zakończeniu imprez istniejących, tak więc jeśli początek lub koniec nowej imprezy wypada pomiędzy początkiem i końcem imprezy istniejącej, wówczas mamy kolizję.
Kod WHERE
($this->resFrom > resFrom AND $this->resFrom < resTo) OR ($this->resTo > resFrom AND $this->resTo < resTo) Ten post edytował Mchl 28.04.2010, 10:14:46 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 20:08 |