Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Archiwum newsów
Forum PHP.pl > Forum > Przedszkole
pawel.ad
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.
crocodillo
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
pawel.ad
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?
crocodillo
Nie sugeruj się tym co napisałem wcześniej. Źle przeczytałem Twoje pytanie.
pawel.ad
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?
phpion
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.
nospor
  1. SELECT * FROM tabela WHERE DATE_FORMAT(pole,'%Y-%m') == '2011-08'
zordon
MONTH()
pawel.ad
@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ć...
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.