根据所有符合条件的行的计数列更新数据库 table 中的百分比列
Update percentage column in database table based on count column of all qualifying rows
我想根据 table 中所有 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
总数的派生 table,然后构建算法来计算百分比并相应地更新行。
连接派生的 table 比为每个符合条件的行调用子查询更有效。
代码:(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;
新table数据:
id
tutorial
count
is_enabled
percentage
1
House
3
1
6
2
Car
34
1
68
3
Tuna Fish
22
0
0
4
Bike
13
1
26
根据您的情况(读取和写入此 table 的频率),您可能宁愿声明一个 TRIGGER 以在 count
或 is_enabled
值时自动计算和更新百分比列已更改或插入了 is_enabled
的新行。
我想根据 table 中所有 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
总数的派生 table,然后构建算法来计算百分比并相应地更新行。
连接派生的 table 比为每个符合条件的行调用子查询更有效。
代码:(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;
新table数据:
id | tutorial | count | is_enabled | percentage |
---|---|---|---|---|
1 | House | 3 | 1 | 6 |
2 | Car | 34 | 1 | 68 |
3 | Tuna Fish | 22 | 0 | 0 |
4 | Bike | 13 | 1 | 26 |
根据您的情况(读取和写入此 table 的频率),您可能宁愿声明一个 TRIGGER 以在 count
或 is_enabled
值时自动计算和更新百分比列已更改或插入了 is_enabled
的新行。