Cytat(rad11 @ 22.06.2015, 18:58:59 )

Grupujesz wedlug daty dany artykul w selecie policz SUM(popularity) as sum i masz wynik w czym problem?
Pamiętaj, że jesteś w dziale
Przedszkole. Zadawanie tutaj pytania "w czym problem?" jest nietaktowne, mówiąc delikatnie.
Cytat(adamoski11)
Potrzebuje pomocy w stworzeniu funkcji, która będzie mi zliczała osobno popularność danego artykułu w dniu dzisiejszym, w ostatnich 7 dniach oraz ostatnim miesiącu.
Sama funkcja tego nie zrobi, bo ma za mało danych. Fred ma dobre rozwiązanie - tworzysz osobną tabelę, w której masz kolumny: id artykułu, data (typu DATE, nie DATETIME - godzina jest niepotrzebna), popularność.
Za każdym razem, gdy twoje 'popularity' wzrasta o 1, zamiast tego najpierw sprawdzasz w bazie, czy istnieje już wpis z dzisiejszą datą i jeśli tak, dodajesz tam 1; jeśli nie, dodajesz cały wiersz (id artykułu, data) wraz z jedynką w kolumnie popularność.
Gdy chcesz sprawdzić popularność artykułu w podanym przedziale czasu, możesz użyć strtotime(), date() oraz BETWEEN w MySQL:
$dataMin = date('Y-m-d', strtotime('1 week ago')); //= data tydzień temu $dataMax = date('Y-m-d'); //= data dziś
I zapytanie w stylu:
SELECT SUM(popularnosc) FROM tabela_popularnosci WHERE id_artykulu = :id_artykulu AND DATA BETWEEN :dataMin AND :dataMax
- zwróci np. 50 dla artykułu, który w zeszłym tygodniu wyświetlono 50 razy. Uważaj na BETWEEN, jest troszkę nieintuicyjny w tym, że wcześniejsza dataMin MUSI być pierwsza (na pierwszy rzut oka wydaje się, że to powinno być obojętne - nie jest).
Gdybyś chciał posortować wszystkie artykuły wg popularności - za enigmatyczną sugestią rad11 - możesz użyć SUM, GROUP BY i ORDER BY, powstanie coś w stylu:
SELECT SUM(popularnosc) AS suma_popularnosci, id_artykulu FROM tabela_popularnosci GROUP BY DATA ORDER BY suma_popularnosci
Swoją drogą - bardzo szczegółowa statystyka. Coś dużego?
edit: merytoryczne + coś brzydkiego się porobiło przy formatowaniu.