簡體   English   中英

平均評級值計數

[英]Average rating value counting

我正在一個擁有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工作 (不確定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)

使用表tbl_averages包含cols shop_idrating

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM