我正在一个拥有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脚本来计算它。
你需要一个cron工作(不确定Yii是否具有使这更容易的功能)。
PHP
基本上,您需要编写一个重新计算投票数的PHP脚本,并将它们放在一个单独的表中,并且您需要该脚本每小时运行一次,或者您需要多长时间运行一次。
cron命令将类似于:
php updateRatings.php
MySQL的
您可以使用类似于下一个命令的命令作为cron。
mysql -h HOST -u USER -pPASS -e"UPDATE ..."
对于实际的SQL查询 - 你应该检查这个问题:MySQL - 基于SELECT Query的UPDATE查询
更新:
您可以使用类似于此的查询:
UPDATE
tbl_averages ta
SET
rating =
(SELECT
AVG(tr.rating)
FROM
tbl_rating tr
WHERE
ta.shop_id = tr.shop_id)
使用包含cols shop_id和rating的表tbl_averages。
非常感谢你的回复,我想我会尝试使用MySQL选项
别客气。 添加了一个您可以使用的查询,我使用您发布的表(以及我制作的新表)对其进行了测试,并且它可以正常工作。
非常友好,谢谢!