【问题标题】:Average rating value counting平均评分值计数
【发布时间】:2013-03-31 17:40:13
【问题描述】:

我正在开发一个拥有 10 星评级系统的网站。所有评分都存储在 tbl_rating 中并具有属性:

id
heading
description
rating (number of stars, 1 to 10)
shop_id (each rating belongs to a shop - my site is a catalog of shops)

我的问题是,计算商店平均评分的最佳方法是什么(基本上我只需要将所有评分与特定 shop_id 相加,然后除以这些评分的数量)。每个商店还有 avg_rating 列,我可以在其中存储值。

有没有办法告诉 MySql 数据库每小时统计一次这个统计数据?我应该在每个新提交的评分之后甚至每次查询商店属性 avg_rating 时都计算它吗?有什么方法可以告诉数据库自动执行此操作,还是我必须从 PHP 运行这些操作?我正在使用 PHP、Yii 框架和 MySQL 数据库。

感谢您的帮助。

【问题讨论】:

  • 您总是可以使用cron 以每小时触发一个php 脚本来计算它。

标签: php mysql database cron rating


【解决方案1】:

你需要一个cron job(不确定 Yii 是否有使这更容易的功能)。

PHP

基本上,您需要编写一个 PHP 脚本来重新计算投票,并将它们放在一个单独的表中,并且您需要该脚本每小时运行一次,或者您希望它多久运行一次。

cron 命令类似于:

php updateRatings.php

MySQL

您可以使用类似于下一个命令的命令作为 cron。

mysql -h HOST -u USER -pPASS -e "UPDATE ..."

对于实际的 SQL 查询 - 你应该检查这个问题:MySQL - UPDATE query based on SELECT Query

更新:

您可以使用类似这样的查询:

UPDATE
    tbl_averages ta
SET 
    rating =
    (SELECT 
        AVG(tr.rating)
    FROM 
        tbl_rating tr
    WHERE 
        ta.shop_id = tr.shop_id)

表 tbl_averages 包含列 shop_idrating

【讨论】:

  • 非常感谢您的回复,我想我会尝试使用 MySQL 选项
  • 不客气。添加了一个您可以使用的查询,我用您发布的表(以及我制作的一个新表)对其进行了测试,它可以工作。
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多