Php 是否从不同的行中删除值,直到数据耗尽?
我有一张这样的桌子Php 是否从不同的行中删除值,直到数据耗尽?,php,mysql,rows,cycle,Php,Mysql,Rows,Cycle,我有一张这样的桌子 +----+-------+------+ | id | apple | pear | +----+-------+------+ | 1 | 3 | 10 | +----+-------+------+ | 2 | 5 | 8 | +----+-------+------+ | 3 | 4 | 7 | +----+-------+------+ +----+-------+------+ | id | apple | pear
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 3 | 10 |
+----+-------+------+
| 2 | 5 | 8 |
+----+-------+------+
| 3 | 4 | 7 |
+----+-------+------+
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 0 | 0 |
+----+-------+------+
| 2 | 0 | 7 |
+----+-------+------+
| 3 | 1 | 7 |
+----+-------+------+
我必须删除9个苹果和11个梨。
这样的结果
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 3 | 10 |
+----+-------+------+
| 2 | 5 | 8 |
+----+-------+------+
| 3 | 4 | 7 |
+----+-------+------+
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 0 | 0 |
+----+-------+------+
| 2 | 0 | 7 |
+----+-------+------+
| 3 | 1 | 7 |
+----+-------+------+
有没有一种不用做很多查询就可以做到这一点的方法
我做了这样的事。
我想知道是否有更好的办法
$eat["apple"]=9;
$eat["pear"]=11;
$id=0; //I will increment this id during the cycle
while ($eat["apple"] > 0 && $eat["pear"] > 0) {
$get_fruit=mysql_query("SELECT id,apple,pear FROM fruits WHERE
id>'".$id."'
ORDER BY id LIMIT 1") or die (mysql_error());
if((mysql_num_rows($get_fruit))==0){
die;
} else {
$fruit = mysql_fetch_assoc($get_fruit);
$id = $fruit["id"];
foreach ($eat as $key => $value) {
if ($fruit[$key]>$eat[$key]) {
$fruit[$key]-=$eat[$key];
$eat[$key]=0;
} else {
$eat[$key]-=$fruit[$key];
$fruit[$key]=0;
}
}
$update=mysql_query("UPDATE fruits SET
apple='".$fruit["apple"]."',
pear='".$fruit["pear"]."'
WHERE id='".$id."'LIMIT 1") or die (mysql_error());
}
}这是苹果
SET @apple = 9;
UPDATE fruits x
JOIN
( SELECT id
, apple
, GREATEST(apple-@apple,0)n,@apple:=@apple-apple
FROM fruits
ORDER
BY id
) y
ON y.id = x.id
SET x.apple = y.n;