Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] wyświetlanie w czasie od .. do ..
bikebog
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Witam.

Chciałbym cyklicznie (co roku) wyświetlać z bazy danych "jakiś tekst" w określonym terminie, np.:
- od 01 września do 01 listopada;
- od 10 grudnia do 30 stycznia.

Proszę o przykład skryptu, który by to wykonał.

Pozdrawiam.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


w bazie dać termin wyświetlanai od do i do warunku wrzucić

  1. WHERE dateStart < NOW() AND dateEnd > NOW() LIMIT 1


limit w razie nakładających się textów ;p

sądze że pomogłem i że to wystarczy smile.gif


--------------------
Go to the top of the page
+Quote Post
bikebog
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Super! myślałem o czymś w tym stylu, ale w tym przypadku musiałbym co roku aktualizować ROK w dacie, a zależy mi by tego nie robić:(

Czy jest jakieś rozwiązanie?smile.gif
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


  1. WHERE MONTH(dateStart) < MONTH(NOW()) AND month(dateEnd) > month(NOW()) LIMIT 1


i leci po miesiacach ;]

chociaż... to wszystko zalezy jakie wpisy będziesz tam dawać bo styczeń to wkońcu jedynka a grudzień to 12 więc jakbyś mógł bardziej zdefiniować przykład w sensiej co dokładnie chcesz uzyskać bo tak ogólnego zapytania chyban ie ma ;]

Ten post edytował melkorm 25.09.2008, 20:23:52


--------------------
Go to the top of the page
+Quote Post
bikebog
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


A jak będzie od 13 stycznia do 20 czerwca? To jak zrobić?smile.gif hihihi
Go to the top of the page
+Quote Post
hateman
post
Post #6





Grupa: Zarejestrowani
Postów: 86
Pomógł: 18
Dołączył: 28.04.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


ja bym to zrobił w PHP i sprawdzał który to jest dzień roku smile.gif

  1. <?php
  2. if(13 < date('z') <120)
  3. ?>
Go to the top of the page
+Quote Post
bikebog
post
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Wszystko było by dobrze, gdyby wyświetlanie dotyczyło tego samego roku, a jak mamy wyświetlić np.:

- od 15 grydnia do 10 stycznia

to taki skrypt niezadziała prawidłowo dlatego chodzi mi o coś co będzie wyświetlało dany rekord w przedziale czasowym na podstawie dnia i miesiąca. Chyba trochę zakręciłem, ale mam nadzieje, że mnie rozumiecie:)
Go to the top of the page
+Quote Post
hateman
post
Post #8





Grupa: Zarejestrowani
Postów: 86
Pomógł: 18
Dołączył: 28.04.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


jak to nie?
zmieniasz tylko zakres

  1. <?php
  2. if(13 > date('z') > 320
  3. ?>
Go to the top of the page
+Quote Post
melkorm
post
Post #9





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


ja wyświetlisz dzień bez roku? snitch.gif


--------------------
Go to the top of the page
+Quote Post
hateman
post
Post #10





Grupa: Zarejestrowani
Postów: 86
Pomógł: 18
Dołączył: 28.04.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat(melkorm @ 25.09.2008, 22:12:15 ) *
ja wyświetlisz dzień bez roku? snitch.gif


questionmark.gif?

ale o co chodzi? tongue.gif

'z' wyświetla który dzisiaj mamy dzień roku
jak chcemy żeby coś się działo w styczniu to 'z' musi być mniejsze od 31
Czego nie rozumiecie?
nie ma znaczenia jaki rok.

Ma tylko w latach przestępnych trzeba dodać sobie 1 dzień w lutym :]
Można npisać na to prostą funkcje sprawdzającą rok
Go to the top of the page
+Quote Post
melkorm
post
Post #11





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


ta, ale wtedy w bazie musisz trzymać dni od którego do którego coś ma się dziać, a jeżeli coś ma się dziać od grudnai do lutego ?

czyli w stylu 345 - 22 ? (dni) => w phpiem ozan dać warunek i będzie smigać ale wtedy w tablcy muszą być wrzucone dni ... a ja mam już prawie zapytanie biggrin.gif


--------------------
Go to the top of the page
+Quote Post
bikebog
post
Post #12





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


W tym samym roku Twoja funkcja będzie dobra i wszystko będzie super działać, lecz jeżeli zakres dotyczy dni znajdujących się w RRRR oraz RRRR+1 to zadziała?

Rok ma powiedzmy 365 dni. jeżeli chcemy wyświetlić coś między 360 dniem 2008 roku i 31 dniem 2009 roku, to jak to zrobić? tak by trzymało się kupy i by przestrzegać tego o czym pisałem wyżej (nie brać pod uwagę aktualizacji w bazie roku danego rekordu).

Wszystko było by okej gdyb nie to, że zakres dotyczyć będzie także miesięcy i dni z różnych RRRR.


Macie pomysł na zapytanie do bazy lub skrypt?
Go to the top of the page
+Quote Post
hateman
post
Post #13





Grupa: Zarejestrowani
Postów: 86
Pomógł: 18
Dołączył: 28.04.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


To ja już nie rozumiem..
Masz konkretne lata?
Jeżeli rok nie ma znaczenia to dzień w roku jest najlepszym rozwiązaniem
chyba że masz od 1.12.2004 do 2.11.2008 to już nie będzie dobrze
Go to the top of the page
+Quote Post
Pilsener
post
Post #14





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Mamy - nie używać formatu daty typu DD MM RRRR tylko przestawić się na unixowy znacznik czasu, czyli to, co zwraca w php funkcja time() - w bazie robisz pole integer i śmiga jak burza, a wyszukiwanie pomiędzy dwiema datami jest banalne. Doceniłem to, kiedy robiłem terminarz i trzeba było duplikować czy przesuwać zadania - zadanie od 10.30 do 12.45 nie mogło kolidować z żadnym innym w tym terminie - dochodzą święta ruchome i nieruchome - pełna tragedia. A dodanie np. do daty miesiąca i dwóch tygodni? Strtotime - i jest. Nie wyobrażam sobie powrotu do daty typu DATETIME.
Go to the top of the page
+Quote Post
melkorm
post
Post #15





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Tak, myslałem o tym tongue.gif I masz pełną racje i to jest najlepsze rozwiązanie. Gdyby nie to że użtkownik jak cholera niechce mieć tam lat a do tego by uzyskać unixowy znacznik czasu potrzbeujesz roku :/


--------------------
Go to the top of the page
+Quote Post
bikebog
post
Post #16





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Wyświetlanie będzie cykliczne co roku. Poniżej podaję przykłady:

od 1 stycznia do 31 stycznia;
od 10 lutego do 15 czerwca;
od 15 lutego do 11 maja;
od 10 grudnia do 15 stycznia;

Zgodnie z tym co mówisz chcesz abym w bazie zapisywał dwie zmienne (numery dni danych dni miesiąca). Problem może pojawićsię w roku przestępnym:(

Mówisz, że masz gotową funkcję na tą sytuację:) Jeśli można to poproszę. Dla upewnienie podaję przykład jak zinterpretowałem Twoją odpowiedź:

  1. <?php
  2. $a = 130
  3. $b = 100 lub 150
  4.  
  5. if( $a < $b) {}
  6. else {}
  7. ?>


Jak wygląda Twoj skrypt?

Ten post edytował bikebog 25.09.2008, 22:02:17
Go to the top of the page
+Quote Post
hateman
post
Post #17





Grupa: Zarejestrowani
Postów: 86
Pomógł: 18
Dołączył: 28.04.2008
Skąd: Poznań

Ostrzeżenie: (0%)
-----


przecież pisałem Ci całą funkcję:

  1. <?php
  2. if(13 > date('z') > 350){
  3. rób co&#347;
  4. }
  5. ?>


To robi coś jeżeli dzisiaj jest dzień miedzy któryś grudnia, a 13 stycznia

aby sprawdzić czy dzisiaj mamy rok przestępny to
  1. <?php
  2. $rok=date('Y');
  3. if(!($rok%4)){
  4. dodaj 1 do dni po 28lutego
  5. }
  6. ?>


Ten post edytował hateman 25.09.2008, 22:37:46
Go to the top of the page
+Quote Post
bikebog
post
Post #18





Grupa: Zarejestrowani
Postów: 44
Pomógł: 1
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Rozumiem, że przy pobieraniu rekordów z bazy i puszczaniu tej funkcji w pętli skrypt będzie wydajny?;-)

OK, No to wariant w PHP już mamy, czy można to teraz przenieść na SQL?smile.gif

Pozdrawiam
Go to the top of the page
+Quote Post
Mchl
post
Post #19





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


A ja próbowałbym tak:
W bazie danych zapisane startDate, endDate. Właściwie dowolnie jak, byle by się dało wyciągnąć miesiąc i dzień. Ja bym zapisał jako timestamp z rokiem 1970 winksmiley.jpg

I teraz
Kod
SELECT * FROM table
WHERE
(DATEDIFF(endDate,startDate) > 0 AND MONTH(startDate) >= MONTH(NOW()) AND DAY(startDate) >= DAY(NOW()) AND MONTH(endDate) <= MONTH(NOW()) AND DAY(andDate) <= DAY(NOW()))
OR
(DATEDIFF(endDate,startDate) < 0 AND MONTH(startDate) <= MONTH(NOW()) AND DAY(startDate) <= DAY(NOW()) AND MONTH(endDate) >= MONTH(NOW()) AND DAY(andDate) >= DAY(NOW()))


Tak na pałę trochę tongue.gif

[edit] Już widzę, że jest źle biggrin.gif

Kod
SELECT * FROM table
WHERE
(DATEDIFF(endDate,startDate) > 0 AND MONTH(startDate) >= MONTH(NOW()) AND DAY(startDate) >= DAY(NOW()) AND MONTH(endDate) <= MONTH(NOW()) AND DAY(andDate) <= DAY(NOW()))
OR
(DATEDIFF(endDate,startDate) < 0 AND (MONTH(startDate) >= MONTH(NOW()) AND DAY(startDate) >= DAY(NOW())) OR (MONTH(endDate) <= MONTH(NOW()) AND DAY(andDate) <= DAY(NOW())))


Tak chyba lepiej... gdzieś na pewno nawiasy pogubiłem

Ten post edytował Mchl 25.09.2008, 23:06:50
Go to the top of the page
+Quote Post
melkorm
post
Post #20





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Kod
DATEDIFF() returns expr1 – expr2 expressed as a value in days from one date to the other. expr1 and expr2 are date or date-and-time expressions.


kolega niechce mieć dat w bazie, tzn. lat (roku) :]

Więc datediff nei zadziała winksmiley.jpg

a o to SQL :

  1. SELECT * FROM test WHERE CASE WHEN dateStart > dateEnd THEN ((dateStart < DAYOFYEAR(NOW())) AND (DAYOFYEAR(NOW()) > dateEnd))
  2. ELSE ((dateStart < DAYOFYEAR(NOW())) AND (DAYOFYEAR(NOW()) < dateEnd)) END;


Z założeniem że dni nie nachodzą na siebie i są podane dni a nie daty smile.gif

edit -> literówka

Ten post edytował melkorm 25.09.2008, 23:27:46


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 21:41