Temat: Wyświetlenie eventów zawierających się w określonych datach

Witajcie. :)

Mam niezłą zagwozdkę. Pewnie ktoś spotkał się z takim problemem.

Mam bazę danych z wydarzeniami. Mniej więcej:
ID, nazwa_wydzarzenia, data_rozpoczecia, data_zakonczenia ...


W bazie data_rozpoczecia to data początku wydarzenia a data zakończenia to data końca wydarzenia.
Jeżeli w bazie uzupełniona jest tylko data rozpoczęcia, to wydarzenie jest jednodniowe. Pola z datami są polami typu DATA. Jeżeli nie ma uzupełnionej daty to z automatu dopisuje się 0000-00-00.

Chcę wyświetlić wydarzenia, które jeszcze trwają i będą zawierać się w danym zakresie dat.

|___wydarzenie__->>>___|zakres do wyświetlenia|___ ->>>> cały czas to samo wydarzenie__|

Jeżeli wydarzenie zaczyna się 2014-12-01 a kończy się 2015-03-01 to po wybraniu zakresu
2015-01-01 do 2015-02-01 nie będzie wyświetlone...

Prróbowałem:
1.
$zapytanie = "select t.*, o.nazwa from $t_t t left outer join $t_ob o on o.id=t.id_o
where
data_roz >= '$data_kal' AND data_roz <= '$data_kal_za_jakis_czas'
or
data_zak >= '$data_kal' AND data_zak <= '$data_kal_za_jakis_czas'
$where order by data_roz";


2.
$zapytanie = "select t.*, o.nazwa from $t_t t left outer join $t_ob o on o.id=t.id_o
where
data_roz >= '$data_kal' AND data_zak <= '$data_kal_za_jakis_czas'
$where order by data_roz";


3.
Jeszcze parę opcji ... Ale na nic moje starania ...


Może ktoś może mnie naprowadzi na trop ?...
Serdecznie dziękuję za każdą pomoc.Ten post został edytowany przez Autora dnia 07.01.15 o godzinie 15:54
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Wyświetlenie eventów zawierających się w określonych datach

wybrana_dolna <= data_zdarzenia_dolna and wybrana_gorna >= data_zdarzenia_gorna

Temat: Wyświetlenie eventów zawierających się w określonych datach

Witam.
Zapytanie, które zaproponowałeś będzie odpowiednie tylko w jednym przypadku i będzie TRUE, jeżeli wydarzenie będzie krótsze niż zakres dat, które mamy do wyświetlenia. Co w przypadku, kiedy wydarzenie jest dłuższe od danego zakresu do wyświetlenia? Postaram się to bardziej zobrazować.

ZAKRES
data_poczatkowa = 01.02.2015
data_koncowa = 01.03.2015

W1
data_rozpoczecia = 01.01.2015
data_zakonczenia = 01.04.2015

W2
data_rozpoczecia = 20.02.2015
data_zakonczenia = 25.02.2015

-----|ZAKRES DO WYŚWIETLENIA|-------
--|------------WYDARZENIE 1-------------|---
-----------|---WYDARZENIE 2---|-------------

Podstawmy teraz dane pod zapytanie kolegi:

wybrana_dolna <= data_zdarzenia_dolna and wybrana_gorna >= data_zdarzenia_gorna

01.02.2015 <= 01.01.2015 AND 01.03.2015 >= 01.04.2015 wynikiem będzię FALSE
01.02.2015 <= 20.02.2015 AND 01.03.2015 >= 25.02.2015 wynikiem będzię TRUE


Czyli zapytanie zaproponowane przez kolegę nie sprawdza się a te dwa wydarzenia mieszczą się w zakresie i mają spełniać warunek. Dzięki Sławku, ale może ktoś ma inny pomysł. Mam tendencję do sprawdzania wszystkiego i analizowania. Mam nadzieję, że dobrze pokazałem o co mi chodzi. Pozdrawiam serdecznie.Ten post został edytowany przez Autora dnia 07.01.15 o godzinie 17:57
Tomasz Zadora

Tomasz Zadora programuję

Temat: Wyświetlenie eventów zawierających się w określonych datach

Dla ułatwienia, lepiej zrób tak, że by obydwie daty zawsze musiały być wypełnione. Jeżeli zdarzenie jest jednodniowe to data rozpoczęcia = data zakończenia.

Sorry, nie chce mi się całego zapytania robić, więc tylko podpowiem: rozwiążesz to używając odpowiedniej kombinacji nawiasów oraz warunków OR i AND :)

Temat: Wyświetlenie eventów zawierających się w określonych datach

:) Kurcze ... Myślałem, że użyję jeszcze BETWEEN ... :P Nie no sory, ale wiem, że całe zapytanie napiszę używając AND i OR i może DROP DATABASE. :P Zawsze wypełnione są te dwa pola daty. ;) Ktoś ma pomysły? Jeżeli ktoś spotkał się z takim problemem, to proszę o pomoc. :) Znam operatory i funkcje, ale nie znam sposobu jak napisać to zapytanie mając konkretną strukturę bazy danych.

Temat: Wyświetlenie eventów zawierających się w określonych datach

No nic. Sory za sarkaz w poprzednim poście. Trzeba to jednak zrobić zakresami wielu kombinacji ANDów. Myślałem że może ktoś zna łatwiejszy sposób. Dzięki za odzew. Pozdrawiam serdecznie. :)
Tomasz Zadora

Tomasz Zadora programuję

Temat: Wyświetlenie eventów zawierających się w określonych datach

No dobra, teraz mam więcej czasu, założenia:

*) Zakładam, że zrobisz tak jak pisałem, czyli data zakończenia nie jest null także dla jednodniowych. To jest bardzo ważne, bez tego wszystko się niepotrzebnie komplikuje.

W sumie zapytanie jest proste:

SELECT * FROM tabela WHERE (data_rozpoczecia >= zakres_od AND data_rozpoczecia <= zakres_do) OR (data_zakonczenia >= zakres_od AND data_zakonczenia <= zakres_do)

Temat: Wyświetlenie eventów zawierających się w określonych datach

Doszedłem do:

SELECT *, IF(data_zak='0000-00-00' AND data_roz<>'0000-00-00',REPLACE(data_zak,'0000-00-00',data_roz),'') FROM tabela WHERE (data_roz >= 2015-01-08 AND data_roz <= 2015-01-15) OR (data_zak >= 2015-01-08 AND data_zak <= 2015-01-15)


ale niestety wyników brak ...Ten post został edytowany przez Autora dnia 08.01.15 o godzinie 08:23

Temat: Wyświetlenie eventów zawierających się w określonych datach

Doszedłem do rozwiązania:

SELECT *, IF(data_zak='0000-00-00' AND data_roz<>'0000-00-00',REPLACE(data_zak,'0000-00-00',data_roz),'') FROM tabela WHERE (data_roz<='2015-01-08' and data_zak>='2015-02-08') or (data_roz>='2015-01-08' and data_roz<='2015-02-08' and data_zak='0000-00-00')


Przynajmniej tak mi się wydaje. Podaję (chyba) rozwiązanie, żeby było dla potomnych. ;) Jeszcze w może w testach coś wyjdzie, ale zapytanie wygląda obiecująco.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Wyświetlenie eventów zawierających się w określonych datach

Widzę, że jednak uparłeś się, aby druga kolumna była null/0000-00-00 kiedy wydarzenia trwa jeden dzień :) No cóż niektórzy ludzie lubią sobie komplikować życie, powodzenia.

Temat: Wyświetlenie eventów zawierających się w określonych datach

To akurat nie jest zależne ode mnie. Ale dałem radę dzięki IF i REPLACE. Wszystko działa jak należy. ;) Dzięki Tomku. :)



Wyślij zaproszenie do