2016-05-25 31 views
-4

我目前正在一個網站上顯示圖片,這些圖片將有一個5星評級。如何存儲評分

問題是,在哪裏,或者如何存儲每張圖片的評分。

示例:對象1給出4顆星的圖片(如何存儲該評分)
對象2給出2顆星的圖片。

所以畫面將有3開始評級

即時通訊目前使用HTML,CSS,PHP和MySQL。

有沒有在MYSQL中存儲的方式的評價?

希望你能幫助我。

+5

你真的得自己嘗試一下。這個問題太廣泛了,堆棧溢出不是一個代碼寫入服務。 – Ivar

+0

通過http://megarush.net/5-star-rating-system-with-php-mysql-jquery-and-ajax/通過閱讀 – epynic

回答

1

保存爲當前:

INSERT INTO ranting (picture_id, user_id, ranting) VALUE (1, 1, 5); 

而得到的平均值,請執行以下操作:

SELECT AVG(ranting) AS ranting, COUNT(ranting) AS total FROM ranting WHERE picture_id=1; 
+0

真棒,將完全工作謝謝 – Neto0291

0

的評價與圖片ID創建一個表(無論你怎麼稱呼的標識符) ,每個評分和用戶標識的分數(如果每個用戶被允許對不同圖像評分的頻率有限制)。如果您想按日期跟蹤評分,請添加日期時間字段。

要獲得彙總評分,只需向數據庫發送一個查詢,在該數據庫中按照圖像ID進行分組,然後在評級列上使用AVG()。

0

讓我們假設你有一個userstable

用戶(ID,用戶名,密碼)

,讓我們假設你有一個picturestable

圖片(ID ,caption,src)

而且,讓我們假設你有一個ratingstable

評級(ID,USER_ID,picture_id,值)

當圖片被顯示給用戶,則需要判斷是否用戶已經額定圖片:

select 1 
from ratings 
where user_id = 5 and picture_id = 10 

(假設5是用戶的登錄ID和10是圖像的id)

如果查詢返回記錄,則用戶已經對照片進行了評分,並且他/她不應該再對其進行評分。如果查詢沒有返回記錄,那麼用戶尚未對照片進行評分,因此他/她應該能夠對其進行評分。

當用戶試圖評分圖片時,您需要insert評分當且僅當用戶尚未評級該圖片。假設具有值5次嘗試的id該用戶評級的2評價以10 id的圖象:

insert into ratings(user_id, picture_id, value) 
select 5, 10, 2 
from ratings 
where not exists (select 1 
        from ratings 
        where user_id = 5 and picture_id = 10) 

當需要加載具有10的ID的圖像的等級,則需要做如下選擇:

select avg(value) as picture_rating 
from ratings 
where picture_id = 10 

如果你不想每次計算這個平均值,那麼你就可以創建以下table

aggregated_ratings(ID,picture_id,價值)

,每當一個新的評級被添加檢查是否已經有聚集的評價,就像這樣:

select 1 
from aggregated_ratings 
where picture_id = 10 

如果你得到一個記錄,然後

update aggregated_ratings 
set value = (select avg(value) 
      from ratings 
      where picture_id = 10) 
where picture_id = 10; 

如果沒有,那麼

insert into aggregated_ratings(picture_id, values) 
select 10, avg(value) 
from ratings 
where picture_id = 10 

請注意,插入/更新到在執行插入到ratings後應該執行。