remove values from different rows until data exhaustion?
up vote
2
down vote
favorite
I have a table like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 3 | 10 |
+----+-------+------+
| 2 | 5 | 8 |
+----+-------+------+
| 3 | 4 | 7 |
+----+-------+------+
I have to delete 9 apple and 11 pears.
A result like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 0 | 0 |
+----+-------+------+
| 2 | 0 | 7 |
+----+-------+------+
| 3 | 1 | 7 |
+----+-------+------+
Is there a way to do this without having to do a lot of queries?
I did something like this.
I wonder if there is a better way.
$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());
}
}
php mysql rows cycle
add a comment |
up vote
2
down vote
favorite
I have a table like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 3 | 10 |
+----+-------+------+
| 2 | 5 | 8 |
+----+-------+------+
| 3 | 4 | 7 |
+----+-------+------+
I have to delete 9 apple and 11 pears.
A result like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 0 | 0 |
+----+-------+------+
| 2 | 0 | 7 |
+----+-------+------+
| 3 | 1 | 7 |
+----+-------+------+
Is there a way to do this without having to do a lot of queries?
I did something like this.
I wonder if there is a better way.
$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());
}
}
php mysql rows cycle
1
Your apples dont add up.
– Mihai
Jan 20 '14 at 14:19
UPDATE table SET apple=SUM(apple)-9;UPDATE table SET apple=o WHERE id!=1
– Mihai
Jan 20 '14 at 14:20
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I have a table like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 3 | 10 |
+----+-------+------+
| 2 | 5 | 8 |
+----+-------+------+
| 3 | 4 | 7 |
+----+-------+------+
I have to delete 9 apple and 11 pears.
A result like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 0 | 0 |
+----+-------+------+
| 2 | 0 | 7 |
+----+-------+------+
| 3 | 1 | 7 |
+----+-------+------+
Is there a way to do this without having to do a lot of queries?
I did something like this.
I wonder if there is a better way.
$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());
}
}
php mysql rows cycle
I have a table like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 3 | 10 |
+----+-------+------+
| 2 | 5 | 8 |
+----+-------+------+
| 3 | 4 | 7 |
+----+-------+------+
I have to delete 9 apple and 11 pears.
A result like this
+----+-------+------+
| id | apple | pear |
+----+-------+------+
| 1 | 0 | 0 |
+----+-------+------+
| 2 | 0 | 7 |
+----+-------+------+
| 3 | 1 | 7 |
+----+-------+------+
Is there a way to do this without having to do a lot of queries?
I did something like this.
I wonder if there is a better way.
$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());
}
}
php mysql rows cycle
php mysql rows cycle
edited Nov 11 at 6:34
Cœur
17k9102140
17k9102140
asked Jan 20 '14 at 14:15
Micky
60118
60118
1
Your apples dont add up.
– Mihai
Jan 20 '14 at 14:19
UPDATE table SET apple=SUM(apple)-9;UPDATE table SET apple=o WHERE id!=1
– Mihai
Jan 20 '14 at 14:20
add a comment |
1
Your apples dont add up.
– Mihai
Jan 20 '14 at 14:19
UPDATE table SET apple=SUM(apple)-9;UPDATE table SET apple=o WHERE id!=1
– Mihai
Jan 20 '14 at 14:20
1
1
Your apples dont add up.
– Mihai
Jan 20 '14 at 14:19
Your apples dont add up.
– Mihai
Jan 20 '14 at 14:19
UPDATE table SET apple=SUM(apple)-9;UPDATE table SET apple=o WHERE id!=1
– Mihai
Jan 20 '14 at 14:20
UPDATE table SET apple=SUM(apple)-9;UPDATE table SET apple=o WHERE id!=1
– Mihai
Jan 20 '14 at 14:20
add a comment |
2 Answers
2
active
oldest
votes
up vote
3
down vote
accepted
CREATE TABLE t
(`id` int, `apple` int, `pear` int)
;
INSERT INTO t
(`id`, `apple`, `pear`)
VALUES
(1, 3, 10),
(2, 5, 8),
(3, 4, 7)
;
UPDATE t
INNER JOIN (
SELECT
id, apple, pear,
GREATEST(0, apple - GREATEST(0, @atr)) AS new_apples,
@atr := @atr - apple,
GREATEST(0, pear - GREATEST(0, @ptr)) AS new_pears,
@ptr := @ptr - pear
FROM t
, (SELECT @atr := 9, @ptr := 11) variable_initialization_subquery /*@atr = ApplesToRemove...*/
ORDER BY id
) sq ON t.id = sq.id
SET t.apple = sq.new_apples,
t.pear = sq.new_pears;
SELECT * FROM t;
| ID | APPLE | PEAR |
|----|-------|------|
| 1 | 0 | 0 |
| 2 | 0 | 7 |
| 3 | 3 | 7 |
- DEMO
add a comment |
up vote
3
down vote
Here's apples...
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;
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
CREATE TABLE t
(`id` int, `apple` int, `pear` int)
;
INSERT INTO t
(`id`, `apple`, `pear`)
VALUES
(1, 3, 10),
(2, 5, 8),
(3, 4, 7)
;
UPDATE t
INNER JOIN (
SELECT
id, apple, pear,
GREATEST(0, apple - GREATEST(0, @atr)) AS new_apples,
@atr := @atr - apple,
GREATEST(0, pear - GREATEST(0, @ptr)) AS new_pears,
@ptr := @ptr - pear
FROM t
, (SELECT @atr := 9, @ptr := 11) variable_initialization_subquery /*@atr = ApplesToRemove...*/
ORDER BY id
) sq ON t.id = sq.id
SET t.apple = sq.new_apples,
t.pear = sq.new_pears;
SELECT * FROM t;
| ID | APPLE | PEAR |
|----|-------|------|
| 1 | 0 | 0 |
| 2 | 0 | 7 |
| 3 | 3 | 7 |
- DEMO
add a comment |
up vote
3
down vote
accepted
CREATE TABLE t
(`id` int, `apple` int, `pear` int)
;
INSERT INTO t
(`id`, `apple`, `pear`)
VALUES
(1, 3, 10),
(2, 5, 8),
(3, 4, 7)
;
UPDATE t
INNER JOIN (
SELECT
id, apple, pear,
GREATEST(0, apple - GREATEST(0, @atr)) AS new_apples,
@atr := @atr - apple,
GREATEST(0, pear - GREATEST(0, @ptr)) AS new_pears,
@ptr := @ptr - pear
FROM t
, (SELECT @atr := 9, @ptr := 11) variable_initialization_subquery /*@atr = ApplesToRemove...*/
ORDER BY id
) sq ON t.id = sq.id
SET t.apple = sq.new_apples,
t.pear = sq.new_pears;
SELECT * FROM t;
| ID | APPLE | PEAR |
|----|-------|------|
| 1 | 0 | 0 |
| 2 | 0 | 7 |
| 3 | 3 | 7 |
- DEMO
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
CREATE TABLE t
(`id` int, `apple` int, `pear` int)
;
INSERT INTO t
(`id`, `apple`, `pear`)
VALUES
(1, 3, 10),
(2, 5, 8),
(3, 4, 7)
;
UPDATE t
INNER JOIN (
SELECT
id, apple, pear,
GREATEST(0, apple - GREATEST(0, @atr)) AS new_apples,
@atr := @atr - apple,
GREATEST(0, pear - GREATEST(0, @ptr)) AS new_pears,
@ptr := @ptr - pear
FROM t
, (SELECT @atr := 9, @ptr := 11) variable_initialization_subquery /*@atr = ApplesToRemove...*/
ORDER BY id
) sq ON t.id = sq.id
SET t.apple = sq.new_apples,
t.pear = sq.new_pears;
SELECT * FROM t;
| ID | APPLE | PEAR |
|----|-------|------|
| 1 | 0 | 0 |
| 2 | 0 | 7 |
| 3 | 3 | 7 |
- DEMO
CREATE TABLE t
(`id` int, `apple` int, `pear` int)
;
INSERT INTO t
(`id`, `apple`, `pear`)
VALUES
(1, 3, 10),
(2, 5, 8),
(3, 4, 7)
;
UPDATE t
INNER JOIN (
SELECT
id, apple, pear,
GREATEST(0, apple - GREATEST(0, @atr)) AS new_apples,
@atr := @atr - apple,
GREATEST(0, pear - GREATEST(0, @ptr)) AS new_pears,
@ptr := @ptr - pear
FROM t
, (SELECT @atr := 9, @ptr := 11) variable_initialization_subquery /*@atr = ApplesToRemove...*/
ORDER BY id
) sq ON t.id = sq.id
SET t.apple = sq.new_apples,
t.pear = sq.new_pears;
SELECT * FROM t;
| ID | APPLE | PEAR |
|----|-------|------|
| 1 | 0 | 0 |
| 2 | 0 | 7 |
| 3 | 3 | 7 |
- DEMO
answered Jan 20 '14 at 14:55
fancyPants
38.5k156378
38.5k156378
add a comment |
add a comment |
up vote
3
down vote
Here's apples...
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;
add a comment |
up vote
3
down vote
Here's apples...
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;
add a comment |
up vote
3
down vote
up vote
3
down vote
Here's apples...
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;
Here's apples...
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;
answered Jan 20 '14 at 14:42
Strawberry
25.7k83149
25.7k83149
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f21236266%2fremove-values-from-different-rows-until-data-exhaustion%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Your apples dont add up.
– Mihai
Jan 20 '14 at 14:19
UPDATE table SET apple=SUM(apple)-9;UPDATE table SET apple=o WHERE id!=1
– Mihai
Jan 20 '14 at 14:20