Zapytanie Godziny od do

0

Witam wszystkich mam problem z zapytaniem mam obecnie taka tabele :


| id | login | godz_od | godz_do |
|_______________________________________________|
932 mix 0900 0900
234 luu 1000 1100
23 wit 1100 1200
21 kit 1300 1500
34 zz 1500 1600
98 mag 1600 1700
...
(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