Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 平均额定值计数_Php_Mysql_Database_Cron_Rating - Fatal编程技术网

Php 平均额定值计数

Php 平均额定值计数,php,mysql,database,cron,rating,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) 我的问题是,如何计算商店的平均评分是最好的方法(基本上,我只需要将所有评分与特定的商店id相加,然后除以这些评分的数量)。每家商店都有av

我在一个网站上工作,它有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)
我的问题是,如何计算商店的平均评分是最好的方法(基本上,我只需要将所有评分与特定的商店id相加,然后除以这些评分的数量)。每家商店都有avg_rating列,我可以在其中存储价值

有没有办法告诉MySql数据库每小时统计一次这些数据?我是否应该在每次提交新评级后,甚至每次查询店铺属性avg_评级时计算它?有没有办法告诉数据库自动执行此操作,或者我必须从PHP运行这些操作?我正在使用PHP、Yii框架和MySQL数据库

谢谢您的帮助。

您需要一个(不确定Yii是否有使这更简单的功能)

PHP

基本上,您需要编写一个PHP脚本来重新计算投票数,并将它们放在一个单独的表中,并且您需要该脚本每小时运行一次,或者您希望多长时间运行一次

cron命令类似于:

php updateRatings.php
MySQL

您可以使用类似于下一个命令的命令作为cron

mysql -h HOST -u USER -pPASS -e "UPDATE ..."
对于实际的SQL查询,您应该检查以下问题:

更新:

您可以使用类似以下内容的查询:

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_id
rating

您可以随时使用
cron
每小时启动一个
php
脚本进行计算。非常感谢您的回复,我想我会尝试使用MySQL选项。欢迎您。添加了一个您可以使用的查询,我用您发布的表(以及我创建的一个新表)对其进行了测试,结果很有效。