平均评级值计数

时间:2013-04-09 10:26:09

标签: php mysql database cron rating

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

你需要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包含cols shop_idrating