我在一个有 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 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)
使用包含列 shop_id
和 rating
的表 tbl_averages。
关于php - 平均评级值计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15899452/