4

我正在开发一个拥有 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 数据库。

谢谢你的帮助。

4

1 回答 1

5

你需要一个cron 工作(不确定 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 包含 colsshop_idrating.

于 2013-04-09T10:37:00.923 回答