Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Posortowanie newsów/wpisów w archiwum - optymalne rozwiązanie
Forum PHP.pl > Forum > PHP
Michael2318
Tworzę takiego 'mini-CMSa' i chciałbym utworzyć sobie takie archiwum. Trzeba by tam wszystkie wpisy ułożyć w pewnej kolejności. Schemat mniej więcej taki:

▼ 2012 (LICZBA WPISÓW)
_▼Grudzień (LICZBA WPISÓW)
__ TITLE PIERWSZEGO NEWSA
__ TITLE DRUGIEGO NEWSA
__ TITLE TRZECIEGO NEWSA
_▼Listopad (LICZBA WPISÓW)
__ TITLE PIERWSZEGO NEWSA
__ TITLE DRUGIEGO NEWSA
__ TITLE TRZECIEGO NEWSA

Pytanie - jak to 'ugryźć', żeby to było najbardziej optymalnie, jak się tylko da, mając do dyspozycji tylko uniksową datę wszystkich wpisów/newsów/postów (jeden pies jak to nazwiemy) ?
krowal
Wg. mnie to zależy od tego ile tych wpisów masz. Jeśli jest ich 20,30,50 to możesz sobie wyciągnąć wszystkie rekordy [title, timestamp] i w PHP w pętli wpakować każdy wpis do tablicy grupując je miesiącami.
  1. foreach($wpisy as $w){
  2. $lista[date('Y-m', $w['timestamp'])][] = $w;
  3. }


Inaczej zrobiłbym gdy wpisów jest dużo więcej, np kilka tysięcy. Wtedy powinieneś zrobić zapytanie które ci policzy ilość wpisów każdego miesiąca za pomocą COUNT() i GROUP BY oraz funkcji date/time w mysql i pokazać same miesiące z ilością wpisów. Klikając w miesiące rozwijałaby się lista z tytułami z jakimś stronicowaniem itp.
wujek2009
Optymalne rozwiązanie? Filtrowanie newsów według kategorii: 2012 -> Grudzień, Styczeń, Luty, itd, 2013 -> Grudzień, Styczeń, Luty, itd oparłbym na podstawie modułu kategorii, który i tak pewnie masz w systemie newsów. Tylko zmodyfikowałbym strukturę - dodałbym trzy nowe pola:
Kod
news_count typu smallint - powinno starczyć ewentualnie typu mediumint
is_special = typu enum (yes|no) bądź tinyint
parent_tree = typu varchar = drzewko w postaci "IP" - było na forum


news_count - wiadomo jak dodajesz nowego njusa dla tego kategorii to dodajesz +1, w przypadku usunięcia -1 - proste.
is_special - w przypadku kategorii typu 2012, styczeń, luty, itd -> zaznaczyłbym "yes" -a w przypadku innych "no" - dlaczego? Ponieważ jak nadasz komuś uprawnienia do pisania njusów to niech zaznacza/odznacza tej kategorii tylko niech to robi z automatu. Plus dodatkowo jak pod newsem będziesz wyświetlał spis kategorii to łatwo sobie ustawisz zapytanie, aby nie pobierało kategorii typu styczeń, grudzień, itd...
parent_tree - chodzi oto, aby móc tworzyć zagłębienia dla kategorii - tak jak to pokazałeś na pierwszym screenie (tj: 2013 -> Grudzień, 2013 -> Styczeń, itd)

Jeśli budowałbyś już taki kod to NIE WYŚWIETLAJ wszystkich newsów dla 12 miesięcy bo po co? proponuje żeby wyświetlało dopiero po kliknięciu w nazwę miesiąca - chyba, że ktoś nie zaznaczył nazwy to niech DOMYŚLNIE wczytuje pierwszy miesiąc.
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.