簡體   English   中英

根據所有符合條件的行的計數列更新數據庫表中的百分比列

[英]Update percentage column in database table based on count column of all qualifying rows

我想根據表中所有is_enabled = 1行的count數據更新percentage列。

在此處輸入圖像描述

我的編碼嘗試如下所示:

<?php 
    $total = '';
    $result= mysqli_query($conn, "SELECT SUM(count) FROM My_Databse WHERE is_enabled ='1'");
    while($row = mysqli_fetch_array($result)){
        $total = $row['SUM(count)'];
    }
    
    $percentage = '';
    $result= mysqli_query($conn, "SELECT * FROM My_Database WHERE is_enabled ='1' ORDER BY count DESC");
    while($row = mysqli_fetch_array($result)){
        $percentage = ($row[2] / $total) * 100;
        echo '<div class="progress">';
        echo '<div class="progress-bar" role="progressbar" aria-valuenow="'.$percentage.'" aria-valuemin="0" aria-valuemax="100" style="width:'.$percentage.'%">';
        echo $row[1].'('.round($percentage).')';
        echo '</div>';
        echo '</div>';
        $i++;
    }
    $result = mysqli_query($conn, "UPDATE My_Database SET percentage = ".$percentage." WHERE id = 1");
?>

我現在有問題,我總是得到最后的百分比。 如何更新每一行的百分比?

更新查詢必須在 while 循環內,計算百分比后 -

mysqli_query($conn, "UPDATE My_Database SET percentage = ".$percentage." WHERE id = ". $row['id'] );

我不建議多次訪問您的數據庫,也不建議使用 php 來執行可以簡單、高效、直接且完全通過單個查詢完成的任務。

加入包含所有符合條件的行的總計count的派生表,然后構建算術來計算百分比並相應地更新行。

連接派生表比為每個符合條件的行調用子查詢更有效。

代碼:( DB-Fiddle

UPDATE my_table
JOIN (SELECT SUM(`count`) total FROM my_table WHERE is_enabled = 1) all_enabled
SET percentage = ROUND(`count` / total * 100)
WHERE is_enabled = 1;

新表數據:

ID 教程 數數 is_enabled 百分比
1個 房子 3個 1個 6個
2個 34 1個 68
3個 吞拿魚 22 0 0
4個 自行車 13 1個 26

根據您的情況(讀取和寫入此表的頻率),您可能寧願聲明一個 TRIGGER 以在更改countis_enabled值或插入帶有is_enabled的新行時自動計算和更新百分比列。

暫無
暫無

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

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