php - 平均评级值计数

标签 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 数据库。

感谢您的帮助。

最佳答案

你需要一个 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_idrating 的表 tbl_averages。

关于php - 平均评级值计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15899452/

相关文章:

php - 如何查看 mysql 查询的状态?

php - 数据访问层,最佳实践

php - mysql - 将行从一个表移动到另一个表或更新

mysql - 如何在MySql中不使用自动增量来增加主键

mongodb - pymongo:在文档中搜索和编辑字段

MySQL 存储过程 - 删除忽略 'WHERE' 子句

php - MySQL 休眠线程耗尽了我所有的连接

php - 验证此图像验证码。 Jquery PHP 和 JavaScript

mysql - 通过类别返回属于某个部门的所有产品的 SQL 过程

java - 如何配置 Hibernate 以立即应用所有保存、更新和删除?