Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rekordy "przechodzące" przez dany dzień
Forum PHP.pl > Forum > Bazy danych > MySQL
Vience
Witam serdecznie,
na wstępie zaznaczę, że w zakresie języka SQL jestem praktycznie zielony mimo że z PHP, a przy tym z SQL, pracuję jakieś 4-5 lat. Podstawowe operacje, joinowanie i takie różne. Coś bardziej skomplikowanego zazwyczaj szukam w internecie, czasami znajdę coś bezpośrednio rozwiązującego mój problem, a czasem muszę nieco poprzerabiać. Stąd też proszę mi wybaczyć być może idiotyczne pytania oraz dziwnie sformułowany tytuł wątku. Wkrótce planuję przysiąść do lektury jakichś podręczników w zakresie SQL, ale na razie muszę skorzystać z Waszej pomocy.

Pracuję nad czymś w rodzaju kalendarza. Najbardziej interesować będą nas dwa pola: termin_start (początek wydarzenia) i termin_koniec (jego koniec). Oba są typu datetime. I załóżmy mam rekord z początkiem wydarzenia 28. stycznia 2013, a końcem 3. lutego 2013. Mam stronę na której wyświetlam kalendarz i każdy dzień jest "klikalny". To natomiast przenosi użytkownika do podstrony z wypisem wydarzeń na dany dzień. i tu jest mój problem: jak skonstruować zapytanie, aby owe wydarzenie pojawiło się zarówno na podstronie 28 stycznia, 3 lutego, a także dni pomiędzy nimi? Kombinowałem na różne sposoby, i na zasadzie większości-mniejszości, przez moment myślałem o funkcji beetween... Ale to do niczego mnie nie doprowadziło.

Pozdrawiam serdecznie i z góry dziękuję za odpowiedzi.
nospor
Problem z sql ma średni związek.. jest to zwykła logika.

Dany dzien należy do danego przedziału jesli:
- poczatek przedzialu jest mniejszy równy danemu dniu
- koniec przedzialu jest wiekszy rowny danemu dniu
Ot i cała filozofia na warunki....

Cytat
przez moment myślałem o funkcji beetween...
No i dobrze myslales.
Dzien znajduje się między początek i koniec.
Vience
Dziękuję serdecznie za szybką odpowiedź.

Zacznę nieco od końca, bowiem od funkcji between w mojej sprawie. Jest ona bezużyteczna w moim przypadku (a przynajmniej mi się tak wydaje) gdyż do zapytania nie mam dostarczonej odpowiedniej ilości informacji. Link poszczególnego dnia wygląda mniej więcej tak: index.php?inc=events&d=30&m=1&y=2013. Metodą GET dostarczam informację o dniu (d), miesiącu (m) i roku (y). Nie bardzo wiem jak miałbym wykorzystać funkcję between przy warunkach where dla termin_start z wartością 2013-01-26 19:00:00 i termin_koniec o wartości 2013-02-03 19:30:00, aby wyświetlić to przy stronie na dzień pomiędzy nimi.

Niestety, o ile na kartce jestem sobie jakoś to rozrysować to przedziały też mi nie wychodzą w praktyce. Jestem ostatnio może zbyt przemęczony i to stąd moje problemy z pomysłem na rozwiązanie problemu. Jednak muszę zrobić projekt (non-profitowy, żeby nie było) do mniej więcej połowy lutego, a nie wiem czy trafi się okazja, żeby odpocząć (roboty trochę jest, nie tylko przy tym projekcie) i na świeżo nad tym popracować, także będę drążyć temat dalej.

Opiszę o co mi chodzi jeszcze raz, bo może wyjaśniłem to niezbyt zrozumiale ze względu na wcześniej wspomniane zmęczenie.
Mam w bazie tabelę w której gromadzę różne informacje na temat imprez, festiwali itd. Mam tam pola na nazwę, opis, jakiś plakat etc, ale to nas akurat tutaj nie interesuje. Dla nas najistotniejsze są dwa pola datetime, jedno przechowujące początek a drugie koniec imprezy. W pewnym miejscu na portalu jest kalendarz z tymi wydarzeniami - o ile sam poglądowy graficzny wykazz kalendarza gdzie są pogrubione dni z jakimiś wydarzeniami, to mam problem z podglądem dniowym w przypadku gdy wydarzenie jest kilkudniowe, a zwłaszcza jak przechodzi przez dwa (lub wiecej) różne miesiące. Np. jedno z nich zaczyna się 26 stycznia, a konczy 3 lutego. Użytkownik zainteresowany jest dniem 30.01 i otwiera jego podstronę czyli index.php?inc=events&d=30&m=1&y=2013. Teraz jak sprawić, aby tam wyświetlił się rekord termin_start z wartością 2013-01-26 19:00:00 i termin_koniec z 2013-02-03 19:30:00?

Nie wiem, wiem że to wygląda absurdalnie i o ile na przestrzeni czysto logicznej jestem sobie w stanie to wszystko rozpracować, to w praktycznej - już nie.
melkorm
Jak już @nospor napisał, może napiszę to po prostu słownie: Jeżeli podana data (ta z $_GET) jest pomiędzy datą rozpoczęcia się imprezy lub datą zakończenia się imprezy to ja wyświetlasz, więc zwykłe between wystarczy smile.gif
Vience
OK, dzięki, problem z głowy! biggrin.gif Byłem święcie przekonany że korzystać z funkcji between można tylko na zasadzie NAZWA POLA between WARTOŚĆ1 AND WARTOŚĆ2, ale już nie WARTOŚĆ beetween POLE1 AND POLE2. Dziękuję serdecznie raz jeszcze!
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.