Zapytanie Godziny od do

0

Witam wszystkich mam problem z zapytaniem mam obecnie taka tabele :


| id | login | godz_od | godz_do |
|_______________________________________________|
932 mix 09:15:00 09:50:00
234 luu 10:00:00 11:00:00
23 wit 11:05:00 12:30:00
21 kit 13:35:00 15:00:00
34 zz 15:10:00 16:10:00
98 mag 16:30:00 17:45:00
...
(tabela przedstawia godziny logowań)

Chciałbym wyświetlić loginy użytkowników, którzy byli zalogowani lub trwała jeszcze ich sesja miedzy 11:00 do 16:00
SELECT login FROM log WHERE godz_od >= '11:00' AND do <='16:00';
wynik tego zapytania to :
'wit' , 'kit'
tutaj powinien być jeszcze login 'zz' ponieważ jego sesja rozpoczęła się o 15:10

Gdy chcę wyświetlić loginy użytkowników, którzy byli zalogowani lub trwała jeszcze ich sesja np. miedzy 11:30 a 11:50
SELECT login FROM log WHERE godz_od >= '11:30' AND do <='11:50';
wynik tego zapytania nic nie zwraca a powinno zwrócić jeden login czyli wit

Proszę o pomoc jak napisać pytanie aby poprawnie wszystko działało bo sam już nie mam pomysłów. Dzięki ALL

0
SELECT login FROM log WHERE
((godz_od >= :godz_od) AND (godz_do <= : godz_do)) OR
((godz_od <  :godz_od) AND (godz_do >  : godz_od)) OR
((godz_od <  :godz_do) AND (godz_do >  : godz_do))

Zapytanie zwraca loginy osob, ktore zalogowaly sie i wylogowaly w przedziale czasu plus tych, ktore zalogowaly sie przed przedzialem, a wylogowaly po rozpoczeciu przedzialu czasu plus tych, ktore zalogowaly sie przed koncem przedzialu a wylogowaly po zakonczeniu przedzialu czasu.

Zgodnie z tym zapytaniem, wpis wit zmiescilby sie w pierwszym wariancie dla godzin 11:00 - 16:00 oraz drugim i trzecim wariancie dla 11:30 - 11:50.

0

Dzięki za pomoc :-)

0

witam
Bardzo dziękuje za ten temat. Pomógł mi częściowo. Otóż mam podobny problem.

Pisze aplikacje wyszukującą i rezerwującą pokoje w pensjonacie. Problem mam z zapytaniem które ma wyszukać wszystkie WOLNE pokoje w zadanym terminie. Po podaniu w zapytaniu dwoch dat przyjazd i odjazd, zapytanie powinno przeszukac baze danych i wyswietlic wolne pokoje.

tabele z bazy które są uzywane:

POKOJE
id_pokoju (int) - klucz glówny
numer_pokoju (varchar)
ilosc_osob (int)
cena (double)
uwagi (warchar)

REZERWACJE
id_rezerwacji (int) - klucz glówny
id_klienta (int)
id_pokoju (int)
data_od (datetime)
data_do (datetime)

Na podstawie rozwiazania podanego wyzej w postach napisalem zapytanie - ale ono wyświetla mi już zarezerwowane pokoje w pensjonacie.

Podaje kod zapytania w MySQL

SELECT numer_pokoju, cena FROM pokoje 
LEFT JOIN rezerwacje USING  (id_pokoju) WHERE
((data_od >= '2010-02-11') AND (data_do <= '2010-02-13')) OR
((data_od <  '2010-02-11') AND (data_do >  '2010-02-13')) OR
((data_od <  '2010-02-11') AND (data_do >  '2010-02-13'))
group by numer_pokoju

A ja potrzebuje aby wyświetlił mi wolne pokoje - gotowe do zarezerwowania. Jak napisać zapytanie aby mi wyświetlało odwrotność??
Prosze o pomoc

EDIT--------------
Siedziałem, siedziałem i wysiedziałem wielkie jajko z rozwiązaniem :))))). Podaje kod zapytania dla potomności - może komuś sie przyda

SELECT num1.numer_pokoju, num1.cena from pokoje as num1
where num1.id_pokoju NOT IN (SELECT num2.numer_pokoju FROM pokoje as num2 
LEFT JOIN rezerwacje USING (id_pokoju) WHERE
((data_od >= '2010-02-11') AND (data_do <= '2010-02-13')) OR
((data_od <  '2010-02-11') AND (data_do >  '2010-02-13')) OR
((data_od <  '2010-02-11') AND (data_do >  '2010-02-13'))
)

group by numer_pokoju

1 użytkowników online, w tym zalogowanych: 0, gości: 1