如何存储评级

时间:2016-05-25 06:55:50

标签: php html mysql

我目前正在一个展示图片的网站上工作,这些图片的评分为5星。

问题是,我在哪里或如何存储每张照片的评级。

示例:主题1为图片提供了4颗星(如何存储该等级)
         主题2给出了2张星。

因此图片将具有3开始评级

我目前正在使用HTML,CSS,PHP和MYSQL。

有没有办法在MYSQL中存储评级?

希望你能帮助我。

3 个答案:

答案 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的插入/更新。