![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
jak skonstruować zapytanie....: tabela zawiera: nazwa | data_od | data_do chciałbym aby pokazane zostały rekordy gdzie dzisiejsza data zawiera się pomiędzy data_od a data_do, utrudnieniem jest to że data_od oraz data_do ma wygląd MM.DD Ten post edytował eurosoft 7.12.2010, 20:54:11 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat POBRANIE DANYCH Z TABELI WG ZAWIERAJĄCYCH SIĘ DAT Nie krzycz. Popraw tytuł na nie krzyczacy.[quote]utrudnieniem jest to że Jesli mozesz to ustaw date jako typ datowy a nie tekst. Jak juz to zrobisz to zwykle BETWEEN rozwiaze sprawe edit: widze ze nie masz roku w polu. Napisz moze co zawiera ta tabela to bedzie latwiej w podaniu odpowiedzi -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Innym rozwiązaniem może być przechowywanie dat w formie Unix wówczas porównanie będzie banalne.
-------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
tabela zawiera nazwy zwierząt oraz ich okresy ochronne. zapytanie ma pokazywać co wolno łowić w dniu dzisijeszym
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
W takim wypadku chyba najprościej było by rozdzielić miesiąc i dzień do innych kolumn i przechowywać je jako wartości liczbowe w tedy będzie łatwo sprawdzić czy bierząca data zawiera się w tym przedziale. Jeśli zastosujesz typ DATE to o ile wiem konieczne będzie podanie też roku a on jest w tym wypadku bez znaczenia.
-------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
a nie można poprzez wartość np '%' podawać roku dowolnego?
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Ja bym podszedł do tego tak... Okresy ochronne mają sztywne daty dni i miesięcy, więc tylko je przechowuj w bazie w formacie: mm-dd.
By wyznaczyć granicę dolną doklejaj z przodu do tego rok obecny. Górna granica podobnie, ale musisz określić czy nowo utworzona data jest większa od dolnej granicy. Jeśli tak to ok, jeśli nie to musisz "podnieść rok". Masz więc zabawę z: if, concat, year ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Tak, uważam że jest to dobry pomysł, mogę prosić o jakiś wzór rozwiązujący mój problem?
Ja bym podszedł do tego tak... Okresy ochronne mają sztywne daty dni i miesięcy, więc tylko je przechowuj w bazie w formacie: mm-dd. By wyznaczyć granicę dolną doklejaj z przodu do tego rok obecny. Górna granica podobnie, ale musisz określić czy nowo utworzona data jest większa od dolnej granicy. Jeśli tak to ok, jeśli nie to musisz "podnieść rok". Masz więc zabawę z: if, concat, year ![]() zrobiłem coś takiego: $dzisiaj = date("m.d");
nie umiem sobie poradzić z "latami" poradzicie coś? |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
No nie do końca tak... Aby porównywać daty, musisz je mieć. Nie masz więc tworzyć daty aktualnej (no chyba że zamiast wywołania now() po stronie bazy, w ramach optymalizacji ) ale daty graniczne okresów, a więc okres_od i okres_do powinny być jako daty z dodanym rokiem.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
ustawienie daty w bazie wraz z rokiem będzie dość uciążliwe, okresy ochronne są takie same w każdym roku więc kłopotliwe będzie aktualizowanie coroku dat okresów.
a może jeszce jakiś pomysł? |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Możesz też przechowywać datę w bazie jako char np. w takiej postaci MM:DD i po sczytaniu potrzebnej ci wartości, rozdzielić ją na miesiąc i dzień za pomocą np. explode(), preg_split() lub str_split() po czym porównać je z aktualną datą. Prościej się chyba nie da.
-------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Czy możesz mi napisać dokładniej jak to skonstruować, sam z chęcią poczytam a jeśli to nie roblem to nie chciabym wyważać otwartych drzwi.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ale co mam ci napisać przecież wszystko już napisałem.
Pierwsza metoda: W bazie danych masz np taką tabelę:
W skrypcie pobierasz wszystko z tabeli i po rozdzieleniu miesięcy i dni za pomocą podanych wcześniej przeze mnie funkcji porównujesz otrzymane wartości z bieżącą datą za pomocą zwykłej instrukcji warunkowej. Następnie jeśli warunek jest spełniony to wypisujesz co ci potrzeba na stronie a jeśli nie to nie robisz nic. Przypuszczam że nie jest to zbyt efektywna metoda bo wymaga pobrania całej tabeli i przelecenia przez wszystkie jej rekordy a do tego zwala całą robotę na PHP ale osobiście nie wiem jak to zrobić prościej. W drugiej metodzie masz taką tabele:
Przy zastosowaniu takiej tabeli możesz porównać kryteria bezpośrednio w zapytaniu SELECT i wybrać jedynie spełniające je elementy z tabeli. Więc to rozwiązanie powinno być efektywniejsze do pierwszego ale zapytanie do bazy będzie znacznie bardziej skomplikowane. Wybór należy do ciebie. -------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 11 Dołączył: 20.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli zrobisz tą drugą proponowaną przeze mnie tabelę:
To cały skrypt będzie wyglądał tak:
-------------------- "Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein |
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A kto pisał, że daty graniczne są na sztywno z rokiem? Ja ten rok chciałem dodawać po stronie bazy
![]() Bierzesz datę początkową z bazy i doklejasz jej rok obecny. Potem bierzesz datę końcową i doklejasz rok obecny oraz sprawdzasz czy jest ona większa od początkowej. Jeśli większa to ok. Jeśli nie to do daty końcowej ( z bazy ) doklejasz rok następny. Wtedy możesz śmiało użyć BETWEEN. Popatrz jak to napisałem a powinienś załapać ideę jak to zrobić ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 5.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dziekuję wszystkim którzy starali się pomóc, temat można zamknąć, a jego rozwiązanie wygląda tak:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 06:34 |