Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] [PHP] System rezerwacji
Forum PHP.pl > Forum > PHP
scorpimen
Ostanio spotkałem się z dość interesującym problemem. Mianowicie mam hotel, ma on 10 pokoji. Mój problem polega na tym że nie wiem jak rozwiązać rezerwacje na dany pokój. 
W tej chwili mam 2 pomysły na rozwiązanie rezerwacji. Pierwszy wydaje się dość dobry. Mianowicie tworzę sobie tabelę w DB o nazwie rezerwacje która powinna wygladać mniej wiecej tak:

ID | ID_pokoju | ID_klienta | rezerwacja_od | rezerwacja_do

Problem polega na tym ze niewiem w jakim formacie zapisywać daty rezerwacji. Czy wybrać format unixowy generowany za pomocą mktime() czy format z mysql. Chodzi oto żeby latwo i szybko się to potem przeszukiwało. 

Drugi pomysł wydaje się mi dość "cieżki" mianowicie tabela wygladala by tak:

dzien_w_roku|pokoj_1 | pokoj_2 | pokoj_3 ............. pokoj_10
1
2
3
...
365


Chodzi generanie oto zeby potem wybierać pierwszy wolny pokój i dokonywać w nim rezerwacji. Jak brzmiało by ewentualnie zapytanie SQL które by sprawdzało czy dany pokój jest wolny w danich od x do y.

Gdyby rezerwacje były dokonywane tylko na 1 dzień to nie miałbym problemu. Bym wybrał pierwszy wolny pokoj z zapytania.
Ale jak sprawdzać czy pokój bedzie wolny w przedziale dni?

Powiedzcie jak byście to rozwiazali.

Pozdrawiam
nevt
polecam zdecydowanie pierwsze rozwiązanie. i pola OD i DO typu DATE - ciebie interesuje tylko rok miesiąc i dzień, niepotrzebne są godziny minuty i sekundy zaszyte w unixowym znaczniku czasu.
scorpimen
Ok dzieki za odpowiedz. Wykombinowalem sobie zapytanie które pokzauje mi wszystkie zarezerwowane pokoje na podany zakres dat. 


  1. SELECT * 
  2. FROM pokoje WHERE `ID` != (SELECT ID_pokoju FROM `rezerwacje`  WHERE ('2008-09-15' BETWEEN `od` AND `do` ) AND ('2008-09-18' BETWEEN `od` AND `do`) )

Jedank gdy wykonam to zapytanie a pokoj bedzie zajety od np. 13 do 17 to pokaze mi ze ten pokoj jest nadal wolny.
Jak spawdzić czy pokój nie jest zajęty i ominać wyżej opisany bład ?
nevt
  1. SELECT * FROM `pokoje` LEFT JOIN `rezerwacje` ON `ID` = `ID_pokoju` WHERE (`od` BETWEEN '2008-09-15' AND '2008-09-18') OR (`do` BETWEEN '2008-09-15' AND '2008-09-18');

powodzenia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.