我目前正在一個網站上顯示圖片,這些圖片將有一個5星評級。如何存儲評分
問題是,在哪裏,或者如何存儲每張圖片的評分。
示例:對象1給出4顆星的圖片(如何存儲該評分)
對象2給出2顆星的圖片。
所以畫面將有3開始評級
即時通訊目前使用HTML,CSS,PHP和MySQL。
有沒有在MYSQL中存儲的方式的評價?
希望你能幫助我。
我目前正在一個網站上顯示圖片,這些圖片將有一個5星評級。如何存儲評分
問題是,在哪裏,或者如何存儲每張圖片的評分。
示例:對象1給出4顆星的圖片(如何存儲該評分)
對象2給出2顆星的圖片。
所以畫面將有3開始評級
即時通訊目前使用HTML,CSS,PHP和MySQL。
有沒有在MYSQL中存儲的方式的評價?
希望你能幫助我。
保存爲當前:
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;
真棒,將完全工作謝謝 – Neto0291
的評價與圖片ID創建一個表(無論你怎麼稱呼的標識符) ,每個評分和用戶標識的分數(如果每個用戶被允許對不同圖像評分的頻率有限制)。如果您想按日期跟蹤評分,請添加日期時間字段。
要獲得彙總評分,只需向數據庫發送一個查詢,在該數據庫中按照圖像ID進行分組,然後在評級列上使用AVG()。
讓我們假設你有一個users
table
:
用戶(ID,用戶名,密碼)
,讓我們假設你有一個pictures
table
:
圖片(ID ,caption,src)
而且,讓我們假設你有一個ratings
table
:
評級(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
後應該執行。
你真的得自己嘗試一下。這個問題太廣泛了,堆棧溢出不是一個代碼寫入服務。 – Ivar
通過http://megarush.net/5-star-rating-system-with-php-mysql-jquery-and-ajax/通過閱讀 – epynic