Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Najpopularniejsze w danym dniu, miesiącu, roku - ranking
Greg23
post 21.07.2012, 13:09:38
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

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


Witam,

Chciałbym stworzyć ranking najpopularniejszych tematów(podstron) w serwisie (w danej godzinie, dniu, miesiącu, roku).
Zastanawiam się jak to zrobić.

Mój pomysł to stworzenie nowej tabeli z kolumnami:
id | data | id_podstrony | licznik

Po wejściu użytkownika na daną podstronę sprawdzamy czy dla aktualnej daty istnieje już id tej podstrony, jeśli tak to inkrementujemy licznik
a jeśli nie dopisujemy nowy rekord z aktualną datą i ustawiamy licznik na 1.

Kod:

  1. $data=date('d.m.Y');
  2.  
  3. $wynik = mysql_query('select id from `ranking_popularnosci` where `data`="'.$data.'" AND `id_podstrony`="'.$id.'" ');
  4. if (mysql_num_rows($wynikdnia) == 0)
  5. { echo $dodaj = mysql_query("INSERT INTO `ranking_popularnosci` VALUES('', '".$data."', '".$id."',1)"); }
  6. else { $nadpisz=mysql_query("UPDATE `ranking_popularnosci` SET licznik=licznik+1 WHERE `id_podstrony`='".$id. "'"); }
  7.  
  8. }
  9.  
  10.  


Z jakiegoś powodu skrypt przy odwiedzeniu danej strony kilka razy nie zwiększa jej licznika tylko dopisuje nowy rekord, co robię nie tak ?

Ten post edytował Greg23 21.07.2012, 15:19:12


--------------------
Go to the top of the page
+Quote Post
emil1702
post 21.07.2012, 14:24:35
Post #2





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 10.01.2012

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


$wynikdnia zawsze będzie równy 0, bo wcześniej nie przypisujesz mu żadnej wartości
Go to the top of the page
+Quote Post
Greg23
post 21.07.2012, 15:21:31
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

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


Jakiejś ślepoty dostałem...

Jest ok, ale to jest ranking dzienny.
W jaki sposób stworzyć na tej podstawie ranking miesięczny ?



--------------------
Go to the top of the page
+Quote Post
csharp
post 21.07.2012, 15:54:39
Post #4





Grupa: Zarejestrowani
Postów: 127
Pomógł: 3
Dołączył: 22.04.2012
Skąd: Warszawa

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


na jednym liczniku nie dasz rady... chyba, że będziesz to dzielił na jakąś ilość dni, ew. możesz zliczać każde wyświetlenie i zapisywać kiedy ono było i na tej podstawie liczyć miesięczne zestawienia.


--------------------
Prywatny blog -> cupial.com.pl
Go to the top of the page
+Quote Post
Greg23
post 21.07.2012, 16:06:49
Post #5





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

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


Tak właśnie myślałem.

Czyli wszelkie rankingi typu godzinny, dzienny, tygodniowy, miesięczny, roczny trzeba by tworzyć na osobnej tabeli ?
Tak będzie najlepiej ?


--------------------
Go to the top of the page
+Quote Post
csharp
post 21.07.2012, 16:18:34
Post #6





Grupa: Zarejestrowani
Postów: 127
Pomógł: 3
Dołączył: 22.04.2012
Skąd: Warszawa

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


myślę, że tak. Tylko nie biorę pod uwagę tutaj wydajności bazy... widziałem w jakimś projekcie coś takiego i w miarę dobrze działało to, baza była duża ale dawała radę spokojnie, bo w zasadzie ciągle coś tam dodajesz.

//jeszcze doczytałem Twoje pytanie..
tz. tworzysz jedną tabele i tam wszystkie wyśietlenia wrzucasz i na jej podstawie wyciągasz sobie odpowiednie dane.. więcej tabel tu nie trzeba.
Robisz z id i datą wyświetlenia i wszystko można z tego odczytać.

Ten post edytował csharp 21.07.2012, 16:19:50


--------------------
Prywatny blog -> cupial.com.pl
Go to the top of the page
+Quote Post
Greg23
post 21.07.2012, 16:31:16
Post #7





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 6.04.2012

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


Cytat(csharp @ 21.07.2012, 17:18:34 ) *
myślę, że tak. Tylko nie biorę pod uwagę tutaj wydajności bazy... widziałem w jakimś projekcie coś takiego i w miarę dobrze działało to, baza była duża ale dawała radę spokojnie, bo w zasadzie ciągle coś tam dodajesz.

//jeszcze doczytałem Twoje pytanie..
tz. tworzysz jedną tabele i tam wszystkie wyśietlenia wrzucasz i na jej podstawie wyciągasz sobie odpowiednie dane.. więcej tabel tu nie trzeba.
Robisz z id i datą wyświetlenia i wszystko można z tego odczytać.


Właśnie chodzi o to żeby to szybko działało bo rekordów jest bardzo dużo.
Gdy będę zapisywał każde wejście na stronę z jego datą i potem to jakoś obrabiał, przeliczając to na statystyki dzienne, miesięczne, roczne itp
to zamuli mi to strasznie wszystko w porównaniu do tworzenia osobnych tabel zliczających wejścia dla danej strony w danym dniu, tygodniu, miesiącu itp, bo chciałbym te dane wyświetlać na stronie.

Chyba, że nie będę przeliczał tego za każdym razem tylko powiedzmy raz dziennie albo jakiś memcached.

W taki razie jeśli zapisywałbym każde wyświetlenie strony do bazy wraz z dokładną datą:

  1. id | id_podstrony | data
  2. 12 | 234 | 2010-07-09 00:48:39


To jak na tej podstawie stworzyć ranking godzinny, dzienny, miesięczny ?

Ten post edytował Greg23 21.07.2012, 16:32:50


--------------------
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: 22.07.2025 - 22:56