【问题标题】:How to store a Rating [closed]如何存储评级[关闭]
【发布时间】:2016-05-25 15:28:51
【问题描述】:

我目前正在开发一个显示图片的网站,这些图片将获得 5 星评级。

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

示例:主题 1 给图片 4 星(我如何存储该评分)
主题 2 给图片打了 2 颗星。

所以图片将有一个 3 开始评级

我目前使用 HTML、CSS、PHP 和 MYSQL。

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

希望你能帮助我。

【问题讨论】:

  • 你真的必须自己尝试一些东西。这个问题太笼统了,Stack Overflow 不是写代码的服务。

标签: php html mysql


【解决方案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;

【讨论】:

  • 太棒了,可以完美运行谢谢
【解决方案2】:

为评分创建一个表格,其中包含图像 ID(无论您如何称呼标识符)、每个评分的分数和用户 ID(如果允许每个用户对不同图像评分的频率有限制)。如果您想按日期跟踪收视率,请添加日期时间字段。

要获得综合评分,只需向您按图像 ID 分组的数据库发送查询,然后在评分列上使用 AVG()。

【讨论】:

    【解决方案3】:

    假设你有一个userstable

    用户(ID、用户名、密码)

    假设你有一个pictures table:

    图片(id、标题、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 评分。假设 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 之后执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2017-07-05
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多