2010-07-05 73 views
0

我有一个名为FLY的TABLE,我有一个名为FLY_NUM.im的列,试图在mysql查询中(以PHP为单位)减少此列的值。 是这样的:如何“一列表减1”?

mysql_query("UPDATE fly SET `fly_Num` = `fly_Num` -1 WHERE fly_ID ='1' "); 

这是错误的,每次这个查询运行,FLY_NUM列设置为zero.how我可以做这样的事情?

+0

您的查询工作对我来说很好。也许还有别的错误。 – Sjoerd 2010-07-05 10:12:24

+1

是在php循环中更新查询吗? – Lizard 2010-07-05 10:29:49

+0

如果你仍然有这个问题,你可以粘贴你的实际代码? – Wes 2010-08-07 16:29:19

回答

5

您的查询是有效和正确的。也不需要在-1之间放置空格。

测试用例:

CREATE TABLE fly (fly_id int, fly_num int); 

INSERT INTO fly VALUES (1, 1); 
INSERT INTO fly VALUES (1, 2); 
INSERT INTO fly VALUES (1, 3); 
INSERT INTO fly VALUES (1, 4); 
INSERT INTO fly VALUES (1, 5); 
INSERT INTO fly VALUES (1, 6); 
INSERT INTO fly VALUES (1, 7); 

更新查询:

UPDATE fly SET `fly_Num` = `fly_Num` -1 WHERE fly_id ='1'; 

Query OK, 7 rows affected (0.00 sec) 
Rows matched: 7 Changed: 7 Warnings: 0 

新表的内容:

SELECT * FROM fly; 

+--------+---------+ 
| fly_id | fly_num | 
+--------+---------+ 
|  1 |  0 | 
|  1 |  1 | 
|  1 |  2 | 
|  1 |  3 | 
|  1 |  4 | 
|  1 |  5 | 
|  1 |  6 | 
+--------+---------+ 
7 rows in set (0.00 sec) 

,如果你使用varcharfly_num列作品甚至:

CREATE TABLE fly (fly_id int, fly_num varchar(10)); 

INSERT INTO fly VALUES (1, '1'); 
INSERT INTO fly VALUES (1, '2'); 
INSERT INTO fly VALUES (1, '3'); 
INSERT INTO fly VALUES (1, '4'); 
INSERT INTO fly VALUES (1, '5'); 
INSERT INTO fly VALUES (1, '6'); 
INSERT INTO fly VALUES (1, '7'); 

更新查询:

UPDATE fly SET `fly_Num` = `fly_Num` -1 WHERE fly_id ='1'; 

Query OK, 7 rows affected (0.00 sec) 
Rows matched: 7 Changed: 7 Warnings: 0 

新表的内容:

SELECT * FROM fly; 

+--------+---------+ 
| fly_id | fly_num | 
+--------+---------+ 
|  1 |  0 | 
|  1 |  1 | 
|  1 |  2 | 
|  1 |  3 | 
|  1 |  4 | 
|  1 |  5 | 
|  1 |  6 | 
+--------+---------+ 
7 rows in set (0.00 sec) 
+0

你能详细说一下吗?注意fly_Num和fly_ID不一样。 – Sjoerd 2010-07-05 10:12:06

+0

@Sjoerd:你说得对,我没有注意到。我已经更新了我的答案。 – 2010-07-05 10:17:42

+0

是的,我也是。 我运行它作为一个SQL查询在phpmyadmin,它工作正常,但在我的PHP查询它将列设置为零!!!!!! 我复制了我的代码中的确切查询! 什么是问题? – 2010-07-05 10:23:21

1

的问题是在你的PHP代码。

你在循环中运行它吗?问这个问题的另一种方式是,当fly_num = 0时,你做什么特别的代码? Phpmyadmin使用与您的代码相同的mysql连接器,所以问题必须在您的代码中,而不是在您的查询中。

注意:您的PHP的另一个可能的问题是,您包括文件多次

每次它包括它会调用数据库,并通过递减1

+0

不,我在单个文件中试过,只是做这个查询! 但问题仍然是! 我发现了关于这个问题的新东西,每次这个查询运行在我的php代码中,它会减少3列!!!!!!! 我试过我的查询,因为这个:“...'fly_Num' ='fly_Num' -3 ...” 和我的价值下降了9倍。这意味着如果我有20在这个专栏,它变成了11! !!!!!!!!!!!!! 我的心在吹! – 2010-07-05 10:59:00

+1

我已经更新了我的答案,因为我认为这可能更容易理解。 – Wes 2010-07-05 11:14:12

+0

@armin:这显然意味着你每次调用更新三次 – knittl 2010-07-20 09:29:40