Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przedział dat, czy 1-przedzial zawiera sie w 2-przedial
alex2
post 29.01.2005, 16:58:20
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 24.09.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
popbart
post 31.01.2005, 02:26:43
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


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


Ten post edytował popbart 31.01.2005, 03:44:40


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:01