Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Budowa systemu oceniania, rate system
maly_pirat
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 13.06.2007

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


Cześć, temat bardziej leży pod pomoc w zarysie projektu, niż problem z danym obiektem.
Chciałbym zbudować system oceniania (coś prostego) na potrzeby artykułów, oraz newsów - tak aby wypozycjonować suchary od tego dobrego materiału ;-)

-> Tabela: rate:
  1. <?php
  2. rate_id int ( 11 ) (wartość default ustawiać? )
  3. rated_id int ( 11 ) (j/w ?)
  4. rater_id int ( 11 ) (j/w)
  5. rate smallint(2) (j/w)
  6. ?>


W skrócie pisząc: rate_id identyfikator dla oceny, rated_id - co oceniamy, czy Artykuł, czy News,
rater_id - kto ocenił userID, oraz rate ocena jaka padła

Coś dodać, coś ująć?

-> Tabela: (dodać nowe kolumny) dla Newsów oraz Artykułów:
  1. <?php
  2. average_rate SMALLINT(3) (wartość DEFAULT ?)
  3. ?>


Czyli teraz np. użytkownik oceni to wykonają się dwa zapytania:
a) wysyła dane dla tabeli [b]rate

cool.gif wysyła przeliczoną liczbę punktów (tabela: newsów/artykułów)

Oczywiście podczas wyświetlania skorzystam z mysql_num_rows czy użytkownik głosował, czy nie.
Czy taki system ma szanse na rozruch, o czymś zapomniałem? Chciałbym aby system miał max 6 rang
1 - gniot
...
6 - arcy dzieło
więc jeśli użytkownik z listy (select, html) wybierze np. ocenę 4 to mam zrobić:

4 / 6 = średnia oceny artykułu / newsa || = 0,6
z taką średnią to raczej nie wypromuje arcy dzieł winksmiley.jpg

Proszę o rozwiązanie, korzystniejsze zastosowanie etc. ;-]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
kajzur
post
Post #2





Grupa: Zarejestrowani
Postów: 385
Pomógł: 26
Dołączył: 22.03.2008
Skąd: TM

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


Może sumuj wartości ocen, a w innym polu daj ile razy głosowano, no i średnia arytmetyczna..


--------------------
Zapraszam na mojego bloga. Dowiedz się jak uzyskać darmowy, zaufany certyfikat albo jak rozpoznawać głos ;)
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Dodałeś kolumnę do tabeli z newsami - gut.
Teraz gdy ocenia wysyła odpowiedną zmienną $_POST

Najpierw należało by pobrać z tabeli aktualny wynik a potem dodać ocenę do sumy i podzielić przez ilość ocen co daje średnią ocen. Aby uzyskać ilość ocen można po chłopsku dodać jeszcze jedną kolumnę gdzie co ocena zwiększała by się wartość o 1. Potem na stronie głównej zliczana była by śr arytmetyczna ocen. Czyli dzielone jedno pole przez drugie w tabeli.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
PanGuzol
post
Post #4





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Tak jak przedmówcy napisali dodatkowe dwa pola w tabeli z artykułami/newsami jedno to suma ocen a drugie ich ilość, dzielisz i masz średnia.
A jak chcesz zapobiegnąć temu aby jeden użytkownik nie głosował więcej niż 2 razy to jeszcze jedno pole dodajesz w którym przechowujesz id użytkowników którzy już zagłosowali oddzielone przecinkami. Następnie korzystając z funkcji explode oraz in_array sprawdzasz czy już głosował.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
maly_pirat
post
Post #5





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 13.06.2007

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


Czyli na przykład w tabeli użytkowników (users table) mam wstawić dwie nowe kolumny (varchar 255 ?) :: news_id, articles_id - będę tam przetrzymywał ID treści, które dany użytkownik ocenił. ID będą w postaci 1:2:3:4:5:6 etc, później wystarczy, że za pomocą explode oraz in_array sprawdzam czy głosował czy nie.

A dlaczego mam tworzyć nowe kolumny w tabeli użytkowników, przecież w tabeli rate mam
  1. <?php
  2. rater_id int ( 11 ) (j/w)
  3. ?>


Odpowiada za ID użytkownika, który zagłosował, tylko nie potrafię zbudować zapytania :-/
  1. <?php
  2. // pokazywanie treści wybranego newsa
  3.  
  4. $news_id = (int) $_GET['news_id'];
  5.  
  6. // sql pobierające info o newsie
  7.  
  8. // sql pobierające głosy
  9. $sql = "SELECT ( CO POBRAĆ ) FROM rate WHERE rated_id = '$news_id' AND rater_id = '$uzytkownikID' ";
  10. następnie przez mysql_num_rows sprawdzić czy głosował, czy nie
  11. ?>


Co mam pobrać z tabeli rate ? Chce sprawdzić czy użytkownik głosował czy nie?
Go to the top of the page
+Quote Post
PanGuzol
post
Post #6





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Źle zrozumiałeś.
Do tabeli z newsami/artykułami dodajesz pola 'suma_ocen', 'ilosc_ocen' i 'kto_ocenial'.
Do wartości w pierwszym polu dodajesz ocenę jaką dał użytkownik,
Wartość drugiego pola zwiększasz o 1 za każdym razem jak ktoś zagłosuje,
A w trzecim polu trzymasz ID userów którzy już zagłosowali oddzielone przecinkami, dwukropkami czy jakimkolwiek innym znakiem.

Ocenę artykułu otrzymujesz dzieląc 'suma-ocen' przez 'ilosc_ocen', a korzystając z funkcji explode oraz in_array sprawdzasz czy ID użytkownika znajduje się już w polu 'kto_ocenial' przy próbie oceny.

Nie potrzebujesz dodatkowej tabeli rates.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
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 Aktualny czas: 20.08.2025 - 03:26