不断减去循环获取mysql结果php中的值

时间:2018-11-05 15:52:34

标签: php mysql

我有一个名为example的mysql表。

 Id   | Amount  | Left | Filled
 1    |  1      |  1   | 0
 2    |  4      |  4   | 0
 5    |  7      |  7   | 0

我有一个名为$var = 9的变量 现在,我有了一个名为$array的数组,其ID为array([0] => 1, [1] => 2, [2] => 5),它本身就是mysql的结果。 我该如何做一个循环,以便数组中的id继续减去左边的值,并继续按数量填充,但仍在$var的总值之内,这样我在表中的最终结果是

 Id   | Amount  | Left | Filled
 1    |  1      |  0   | 1
 2    |  4      |  0   | 4
 5    |  7      |  3   | 4

1 个答案:

答案 0 :(得分:0)

您可以使用while循环来循环id并减少每次迭代的数量。

我不确定您如何访问数据库,因此我将其保留为伪造。

考虑以下代码:

$ids = array(1,2,5);
$value = 9;

function reduceAmount($id, $value) {
    $query = mysqli_query($conn, "SELECT * FROM example WHERE Id='$id'");
    $row = mysqli_fetch_array($query);     
    $take = min($row['Left'], $value); // the amount you can take (not more then what left)

    $left = $row['Left'] - $take;
    $filled = $row['Filled'] + $take;
    $conn->query("UPDATE example SET Left='$left', Filled='$filled' WHERE Id='$id'")
    return max(0, $value - $take);
}

while ($value > 0 && !empty($ids)) { // check if value still high and the options ids not finish
    $id = array_shift($ids); //get first ID
    $value = reduceAmount($id, $value);
}

您可以在循环结束时检查value是否仍大于0-如果ids中的“金额”不足,就会发生这种情况