Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Archiwum newsów
pawel.ad
post 11.08.2011, 18:42:24
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

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


Witam.
Robię prosty system do zarządzania newsami razem z archiwum, tj. wyświetlania newsów z danego miesiąca. Plan jest taki żeby pobrać datę(datetime) z MySQL i zrobić pętlę która sprawdzałaby czy któryś rekord z bazy jest w danym miesiącu i wyświetlić go(lub nie). Na konieć dodajemy jeden miesiąc aż do miesiąca bieżącego. Nie wiedziałem w sumie do końća jak sie do tego zabrać, ale napisałem coś takiego:
  1. $start = strtotime('01.01.2011');
  2. $end = strtotime('today');
  3. $date = $start;
  4. while($date < $end)
  5. {
  6. foreach($news_date as $news_dates)
  7. {
  8. $start_date = '01'.date('.m.Y', $date);
  9. $end_date = date('t.m.Y', $date);
  10. if(is_date_between($start_date, $end_date, $news_dates))
  11. {
  12. echo date_pl('F', $date);
  13. echo '<br>';
  14. };
  15. };
  16. $date = strtotime("+1 month", $date);
  17. };
  18.  

Daty z MySQL są w arrayu $news_date.
Tylko że teraz każdy news zwraca albo nazwę miesiąca albo nic, czyli np. jak mam 3 wpisy w sierpniu to wypisuje mi 3 razy pod "sierpień". Wiem dlaczego tak się dzieję, ale nie mam już pomysłu jak się a to zabrać, i twierdziłem że lepiej będzie napisać o tym na forum niż męczyć się nad tym. Tym bardziej że bardzo możliwe zabrałem się od tego od całkowicie złej strony i jest na to 10x bardziej logiczne i łatwiejsze rozwiązanie(nie jestem np. pewny co do sprowadzania dat do arraya).

W każdym razie prosiłbym o pomoc z naprawieniem tego kodu, albo wskazówkę/logikę działania kodu lepszego.

Ten post edytował pawel.ad 11.08.2011, 18:44:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
crocodillo
post 11.08.2011, 20:11:51
Post #2





Grupa: Zarejestrowani
Postów: 215
Pomógł: 44
Dołączył: 31.07.2011
Skąd: wrocław

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


Najprościej i najszybciej będzie przefiltrować wyniki już w MySQL
np:
  1. SELECT something FROM tbl_name WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

więcej szczegółów: http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html
Go to the top of the page
+Quote Post
pawel.ad
post 11.08.2011, 20:46:28
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

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


Ale wtedy dla każdego miesiąca musiał bym mieć osobne zapytanie do bazy, tak?
Popraw mnie jeśli się mylę, ale nie jet to chyba dobre rozwiązanie pod względem optymalności(?).

Jakieś inne propozycje?
Go to the top of the page
+Quote Post
crocodillo
post 11.08.2011, 20:56:09
Post #4





Grupa: Zarejestrowani
Postów: 215
Pomógł: 44
Dołączył: 31.07.2011
Skąd: wrocław

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


Nie sugeruj się tym co napisałem wcześniej. Źle przeczytałem Twoje pytanie.
Go to the top of the page
+Quote Post
pawel.ad
post 12.08.2011, 12:25:11
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

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


OK smile.gif

Ktoś inny ma jakieś propozycje?

---

Dobra podszedłem do tego od innej strony.
Mam teraz numer miesiąca i chcę wyciągnąć z bazy wszystkie rekordy których data [datetime] jest w tym miesiącu. Ale niestety opdada tu rozwiązanie kolegi, bo nie każdy miesiąc ma 30 dni...

Jakieś pomysły?

Ten post edytował pawel.ad 12.08.2011, 12:41:21
Go to the top of the page
+Quote Post
phpion
post 12.08.2011, 12:27:27
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ustal datę pierwszego dnia w miesiącu (chyba nie jest to problem) oraz ostatniego (date - poszukaj jak pobrać liczbę dni w miesiącu) i podstaw te wartości do zapytania.
Go to the top of the page
+Quote Post
nospor
post 12.08.2011, 12:30:51
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT * FROM tabela WHERE DATE_FORMAT(pole,'%Y-%m') == '2011-08'


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
zordon
post 12.08.2011, 12:31:01
Post #8





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

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


MONTH()
Go to the top of the page
+Quote Post
pawel.ad
post 12.08.2011, 12:40:39
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

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


@phpion - właśnie miałem zamiar to zrobić ale rozwiązanie @nospor'a jest lepsze smile.gif
@nospor - super! o to mi chodziło
@zordon - też fajne rozwiązanie

Na tyle sposobów to można było zrobić...
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 15:01