Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Wyszukiwarka wolnych terminów
Forum PHP.pl > Forum > Bazy danych > MySQL
HBK
Tabela: katalog

id_kwatery | nazwa | miejscowosc | ilosc_miejsc
1 | Dom | Łódź | 2
2 | Dom | Łódź | 4
3 | Dom | Łódź | 4
4 | Dom | Łódź | 6
5 | Dom | Łódź | 2
6 | Dom | Łódź | 3
7 | Dom | Łódź | 2
8 | Dom | Łódź | 2

Tabela: rezerwacja

id_rez | id_ogloszenia | data_przyjazdu | data_wyjazdu
1 | 1 | 2011-09-15 | 2011-09-22
2 | 1 | 2011-09-23 | 2011-10-10
3 | 3 | 2011-09-10 | 2011-09-17
4 | 5 | 2011-09-19 | 2011-09-28


  1. $wh = array();
  2. IF (!empty($_POST['miejscowosc']))
  3. $wh[] = "miejscowosc = '$_POST[miejscowosc]' ";
  4.  
  5. IF (!empty($_POST['liczba_osob']))
  6. $wh[] = "ilosc_miejsc >= '$_POST[liczba_osob]' ";
  7.  
  8. IF (!empty($_POST['data_przyjazdu']) || !empty($_POST['data_wyjazdu']))
  9. $wh[] = "(data_przyjazdu NOT BETWEEN '$_POST[data_przyjazdu]' AND '$_POST[data_wyjazdu]') AND (data_wyjazdu NOT BETWEEN '$_POST[data_przyjazdu]' AND '$_POST[data_wyjazdu]') ";
  10.  
  11. IF (!empty($wh))
  12. $where = ' WHERE '.implode(' AND ', $wh);
  13. else
  14. $where = '';
  15.  
  16. $sql = 'SELECT * FROM katalog INNER JOIN rezerwacja ON katalog.id_kwatery = rezerwacja.id_ogloszenia '.$where;
  17.  

Wyszukiwarka:

Miejscowość
Liczba osób
Data przyjazdu
Data wyjazdu


Powinno działać tak, że wyszukuje wszystkie wolne kwatery w danym terminie z wyszukiwarki.

Obecnie jak wyszukam tylko po miejscowości to jeden wynik się dubluje a jak wyszukam też po datach to wyświetla rezerwacje zamiast katalogu.

Co takiego źle robię?
dmateo
Cytat(HBK @ 10.09.2011, 15:31:00 ) *
  1. SELECT * FROM katalog INNER JOIN rezerwacja ON katalog.id_kwatery = rezerwacja.id_ogloszenia

Co takiego źle robię?

Przede wszystkim jeśli chcesz znaleźć wolne kwatery w danym terminie to raczej Left join zamiast inner.
elektrrrus
No i dawanie danych z $_POST bezpośrednio do zapytania to piękne zaproszenie do włamania sie do bazy
HBK
Cytat(dmateo @ 10.09.2011, 16:40:33 ) *
Przede wszystkim jeśli chcesz znaleźć wolne kwatery w danym terminie to raczej Left join zamiast inner.


LEFT JOIN

Sortowanie po miejscowości i liczbie osób działa dobrze ale jak dodam daty to wyświetlają się rezerwacje zamiast listy kwater kwater :/



@elektrrrus

to jest wersja robocza, wpierw zależy mi na działaniu
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.