Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ocenianie
Forum PHP.pl > Forum > PHP
decha-design
Witajcie,

Mam taki oto problem. W sumie to nieduży, ale nie mam pojęcia jak go rozwiązać. Może wy mi podsuniecie rozwiązanie.

Mianowicie, mam system oceniania komentarzy, artykułów itd. Ocena jest przechowywana w bazie danych, przy np. danych komentarzu. Jest sobie zapytanie:
  1. "UPDATE `".$this->prefix."news_comments` SET `rating`=`rating`+1 WHERE `id`='".$_GET['cid']."'"


Ocenia fajnie, w tym wypadku zwiększa ocenę o 1. No i teraz, chcę zrobić możliwość ocenienia tylko raz, przez jednego użytkownika danego komentarza, newsa. Jak wy byście do zrobili?

1) Można w sumie oceny trzymać w osobnej tabeli, ale to raczej będzie nieopłacalne (nie potrzeba do tego osobnej tabeli). Szkoda miejsca.
2) Można to zrobić na zasadzie ciasteczka. Ale ciastko można usunąć.

Jak wy byście to zrobili?

btw. w sumie to chyba w złym dziale to napisałem o.O'
Mephistofeles
Ja bym to zrobił na sesji, niby można usunąć id ale wtedy też wyloguje usera, więc jak kto woli winksmiley.jpg.
michalg
Witam,

Cytat(Mephistofeles @ 16.03.2009, 17:53:01 ) *
Ja bym to zrobił na sesji, niby można usunąć id ale wtedy też wyloguje usera, więc jak kto woli winksmiley.jpg .


No, ale w ten sposób po każdym zalogowaniu użytkownik będzie mógł ponownie oddawać głos na artykuł. A o to chyba nie chodziło autorowi pytania.

Cytat(decha-design @ 16.03.2009, 17:45:11 ) *
Ocenia fajnie, w tym wypadku zwiększa ocenę o 1. No i teraz, chcę zrobić możliwość ocenienia tylko raz, przez jednego użytkownika danego komentarza, newsa. Jak wy byście do zrobili?

1) Można w sumie oceny trzymać w osobnej tabeli, ale to raczej będzie nieopłacalne (nie potrzeba do tego osobnej tabeli). Szkoda miejsca.
2) Można to zrobić na zasadzie ciasteczka. Ale ciastko można usunąć.

Jak wy byście to zrobili?


Jedyny wybór to baza danych, nie trzymaj danych po stronie przeglądarki, bo nigdy nie zagwarantujesz tego, że użytkownik nie będzie kombinował.

Naprawdę Ci szkoda miejsca na jedną tabelę składająca się z dwóch kolumn? Bo nawet tyle Ci wystarczy - id artykułu, id użytkownika. Nawet jak dodasz dodatkowe kolumny typu znak (głos dodatni, głos ujemny), data/czas oddania głosu, to IMHO rozmiar tej tabeli będzie znikomy w stosunku do tabeli z artykułami.
decha-design
Dobra, może źle się wyraziłem z tym miejscem ...

W sumie to będzie tylko kilka kb ... nic wielkiego ... ale to trzeba też zliczyć, a ja mam niestety ocenę wyrażoną w punktach np. - 50, 0, +24 ... nie w skali od 1-10 ... więc ze zliczaniem byłoby w sumie chyba dużo roboty ...

Co prawda, w SQL istnieje funkcja SUM, ale nie wiem jak ona się zachowa z danymi typu double ... jak mam i liczby dodatnie i ujemne
michalg
Cytat(decha-design @ 16.03.2009, 19:57:38 ) *
Co prawda, w SQL istnieje funkcja SUM, ale nie wiem jak ona się zachowa z danymi typu double ... jak mam i liczby minusem jak i plusowe


O ile potrzebujesz zwykłą sumę arytmetyczną, to zadziała bez problemu, nie martw się. Załóż dodatkowo indeks na id artykułu jeżeli martwisz się o wydajność.
decha-design
Ok, zobaczę co mi z tego wyjdzie. =)
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.