Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przedział dat
Forum PHP.pl > Forum > Bazy danych > MySQL
alex2
Witam.
Być może to proste ale niestety nie mam pomysłu jak to rozwiązać.

Tworzę system rezerwacji łodzi.
Mam tabelę

Łodzie
id_lodzi | nazwa | typ | ...

i 2 tabela

Rezerwacje
id_rezerwacji | id_lodzi | data_start | data_stop

i teraz w 2 zmiennych mam. np:
$data_rozpoczecia="2005-02-11"; (data podana w formularzu)
$data_zakonczenia="2005-02-15";

i chciałbym stworzyc takie zapytanie które pokazało by mi wolne jachty
w tym przedziale czasowym jaki jest w zmiennych.
Ale zakladajac ze data_stop (data zakonczenia rezerwacji) moze sie rownac dacie wynajmu przez kolejnego klienta. (tzn. ktos dzis oddaje łodz i ta łodz moze dzis zostac wypozyczona nastepnej osobie)

Bardzo proszę o pomoc.
kolumny data_start i _stop ustawione są na DATE

Ale dla rozwiązania mojego problemu mogę przebudować baze.
Proszę tylko podpowiedzieć jak to rozwiązac

Za pomoc z góry dziękuje.
popbart
Nie wiem czy to będzie działało, ale może cię naprowadzę na jakiś tor smile.gif
  1. SELECT nazwa, typ,
  2. mid( group_concat( data_do ORDER BY data_do DESC separator ' ' ) , 12, 10 ) AS wolna_data_od,
  3. mid( group_concat( data_od ORDER BY data_od DESC separator ' ' ) , 1, 10 ) AS wolna_data_do
  4. FROM lodzie LEFT JOIN rezerwacje USING ( id_lod )
  5. WHERE data_od < '2005-02-15' AND data_do >= '2005-02-11'
  6. GROUP BY lodzie.id_lod

Oczywiście GROUP_CONCAT() was added in MySQL 4.1. sad.gif

edit-----
Tak mnie to zaciekawiło że się męczyłem do 03:29 smile.gif.
Masz tu działający kod -oczywiście wyszukuje dostępne łodzie w podanym przedziale czasowym, ale też pokazuje łódź która nie jest wypożyczana(znaczek '~' nieskańczoności)

  1. SELECT nazwa, typ,
  2. IF (
  3. mid( group_concat( data_od ORDER BY data_od DESC separator ' ' ) , 1, 10 ) < '2005-02-11',
  4. mid( group_concat( data_do ORDER BY data_od DESC separator ' ' ) , 1, 10 ) ,
  5. mid( group_concat( data_do ORDER BY data_do DESC separator ' ' ) , 12, 10 )) AS wolna_data_od,
  6. IF (
  7. mid( group_concat( data_od ORDER BY data_od DESC separator ' ' ) , 1, 10 ) < '2005-02-11', '~',
  8. mid( group_concat( data_od ORDER BY data_od DESC separator ' ' ) , 1, 10 )) AS wolna_data_do
  9. FROM lodz LEFT JOIN rezerwacja USING ( id_lod )
  10. WHERE data_od < '2005-02-15' OR data_do >= '2005-02-11' OR data_do IS NULL
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.