Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Budowa systemu oceniania
Forum PHP.pl > Forum > Przedszkole
maly_pirat
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. ;-]
kajzur
Może sumuj wartości ocen, a w innym polu daj ile razy głosowano, no i średnia arytmetyczna..
MateuszS
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.
PanGuzol
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ł.
maly_pirat
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?
PanGuzol
Ź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.
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.