[英]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 以在更改count
或is_enabled
值或插入帶有is_enabled
的新行時自動計算和更新百分比列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.