我目前正在一个展示图片的网站上工作,这些图片的评分为5星。
问题是,我在哪里或如何存储每张照片的评级。
示例:主题1为图片提供了4颗星(如何存储该等级)
主题2给出了2张星。
因此图片将具有3开始评级
我目前正在使用HTML,CSS,PHP和MYSQL。
有没有办法在MYSQL中存储评级?
希望你能帮助我。
答案 0 :(得分: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;
答案 1 :(得分:0)
使用图片ID(无论您称之为标识符)创建评级表,每个评级的得分和用户ID(如果允许每个用户对不同图像进行评级的频率有限)。如果要按日期跟踪评级,请添加日期时间字段。
要获得聚合评级,只需将查询发送到您按图像ID分组的数据库,并在评级列上使用AVG()。
答案 2 :(得分:0)
我们假设你有users
table
:
用户(id,用户名,密码)
我们假设你有pictures
table
:
图片(id,标题,src)
另外,我们假设你有ratings
table
:
评分(id,user_id,picture_id,value)
向用户显示图片时,您需要确定用户是否已对图片进行了评分:
select 1
from ratings
where user_id = 5 and picture_id = 10
(假设5是用户登录的id,10是图片的id)
如果查询返回记录,则用户已经对图片进行了评级,他/她应该不再对其进行评分。如果查询没有返回记录,那么用户还没有对图片进行评分,因此他/她应该能够对其进行评分。
当用户尝试为图片评分时,当且仅当用户尚未评估该图片时,您需要insert
评分。假设id值为5的用户尝试对id为10且评级为2的图片进行评级:
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)
当您需要加载id为10的图片的评级时,您需要进行以下选择:
select avg(value) as picture_rating
from ratings
where picture_id = 10
如果您不想每次计算此平均值,则可以创建以下table
:
aggregated_ratings(id,picture_id,value)
每当添加新评级时,请检查是否已存在汇总评级,如下所示:
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
请注意,在aggregated_ratings
的插入执行后,应执行ratings
的插入/更新。