maxell2k11 0 Zgłoś post Napisano Listopad 16, 2012 Witam wszystkich, mam sobię tabelę Mysql: pola: przyjazd (DATE) i wyjazd (DATE) Przykładowe dane: przyjazd: 2012-10-22 DO wyjazd: 2012-10-27 przyjazd: 2012-10-27 DO wyjazd: 2012-11-03 przyjazd: 2012-11-03 DO wyjazd: 2012-11-17 I teraz chodzi o to jak sprawdzać aby nie zarezerwować nowego terminu który by się kolidował z już dodanym ? ma ktoś jakieś fajne zapytanie ? SELECT * FROM `terminy_rezerwacji` where (DATE_FORMAT(arrival_date, '%Y-%m-%d') >= '$date_end' AND DATE_FORMAT(departure_date, '%Y-%m-%d') <= '$date_start')) Mam coś takiego ale nie zabezpieczy mnie to przed wszysktimi kombinacjami... Udostępnij ten post Link to postu Udostępnij na innych stronach
www.gamebit.pl 6 Zgłoś post Napisano Listopad 16, 2012 (edytowany) Takie rozwiązanie na szybko: Sprawdź: SELECT count(*) FROM terminy_rezerwacji WHERE ((('$s1' BETWEEN arrival_date AND departure_date) AND '$s1' <> departure_date) or (('$s2' BETWEEN arrival_date AND departure_date) AND '$s2' <> arrival_date)) Jeśli count() zwróci >1 rekord nie dodajesz rezerwacji - w przeciwnym wypadku dodajesz. Zamienne $s1 - data przyjazdu nowej rezerwacji, $s2 - data wyjazdu nowej rezerwacji. Można zamknąć to wszystko w jedno zapytanie (z insertem od razu) jakbyś chciał to zapraszam do kontaktu. Napisałem to wyobrażając sobie bazę na szybko i nie wykluczam iż może być w tym jakiś błąd. Zapraszam w razie czego do kontaktu online gg: 5236547 Pozdrawiam Edytowano Listopad 16, 2012 przez www.gamebit.pl (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
maxell2k11 0 Zgłoś post Napisano Listopad 16, 2012 Dzięki Gamebit jeżeli ktoś ma inne pomysły - zapraszam do pisania Udostępnij ten post Link to postu Udostępnij na innych stronach
maxell2k11 0 Zgłoś post Napisano Listopad 16, 2012 Niesteyt podanw wyzej zapytanie nie dziala :/ Udostępnij ten post Link to postu Udostępnij na innych stronach
vretch 3 Zgłoś post Napisano Listopad 16, 2012 Zakłądając, że dobrze zrozumiałem intencje: SELECT COUNT( id ) FROM `terminy` WHERE ( arrival_date < '2012-11-23' AND departure_date > '2012-11-23' ) OR ( arrival_date < '2012-12-08' AND departure_date > '2012-12-08' ) gdzie: 2012-11-23 - data planowanego przyjazdu 2012-12-08 - data planowanego wyjazdu Udostępnij ten post Link to postu Udostępnij na innych stronach
dannix 45 Zgłoś post Napisano Listopad 16, 2012 Jeśli chcesz sprawdzić czy podany przedział jest już zablowowany to: $date_start; /* data przyjazdu */ $date_end; /* data wyjazdu */ SELECT * FROM terminy_rezerwacji WHERE $date_end > arrival_date AND departure_date > $date_start; powinno Ci podać wszystkie przedziały czasowe, które już są w bazie i kolidują z nowym terminem. Więc jeśli to zapytanie zwróci ci jakiś rekord, to znaczy że pokój w wybranym terminie jest już zajęty. Jeśli nie dostaniesz żadnych rekordów, to termin jest wolny. Udostępnij ten post Link to postu Udostępnij na innych stronach
www.gamebit.pl 6 Zgłoś post Napisano Listopad 16, 2012 Poprawka: SELECT count(*) FROM terminy_rezerwacji WHERE ((('$s1' BETWEEN arrival_date AND departure_date) AND '$s1' <> departure_date) or (('$s2' BETWEEN arrival_date AND departure_date) AND '$s2' <> arrival_date) or (('$s1' < arrival_date) AND ('$s2' > departure_date))) Udostępnij ten post Link to postu Udostępnij na innych stronach
GeoAce 67 Zgłoś post Napisano Grudzień 9, 2012 (edytowany) Ja bym pokombinował tak. W zmiennej date dajesz tą date która zarezerwował. Np. z formularza odbierasz: "addslashes(htmlspecialchars($_POST['data']));" $zapytanie = mysql_query("SELECT * from tabela WHERE date='$date'"); i teraz liczysz czy już jest if(mysql_num_rows($zapytanie) = 0) { //Rezerwujemy } else { echo 'Przepraszamy, ale data juz jest zarezerwowana'; } Edytowano Grudzień 9, 2012 przez GeoAce (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Macsch 122 Zgłoś post Napisano Grudzień 9, 2012 if(mysql_num_rows($zapytanie) = 0) { ... PHP to nie MySQL. Operatory identyczności zaczynają się od dwóch "=". Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość Kamikadze Zgłoś post Napisano Grudzień 9, 2012 Ja bym pokombinował tak. W zmiennej date dajesz tą date która zarezerwował. Np. z formularza odbierasz: "addslashes(htmlspecialchars($_POST['data']));" $zapytanie = mysql_query("SELECT * from tabela WHERE date='$date'"); i teraz liczysz czy już jest if(mysql_num_rows($zapytanie) = 0) { //Rezerwujemy } else { echo 'Przepraszamy, ale data juz jest zarezerwowana'; } Nie wiem co cię naszło na odgrzewanie starych kotletów na forum Udostępnij ten post Link to postu Udostępnij na innych stronach