更新/递增多个MySQL列在一个查询
我有这个疑问,它的工作原理...更新/递增多个MySQL列在一个查询
UPDATE `contacts`
SET `calls_to`=`calls_to`+1
WHERE `contact_no` = '0412345678';
我也想要做的是一个价值增加了成本的项目。从我的理解,顺便做这将是...
UPDATE `contacts`
SET `calls_to` = `calls_to`+1,
`cost_to` = `cost_to`+0.25
WHERE `contact_no`='0412345678';
很明显,因为我在这里发帖,它不工作,因为我期望的那样。
--UPDATE--
按照要求,表结构..
id int(255) auto_increment
contact_owner varchar(255)
contact_no varchar(11)
contact_name varchar(255)
calls_to int(255)
txts_to int(255)
time_talked_to int(255)
cost_to decimal(65,2)
检查为cost_to
的数据类型为int,或者如果它的价值not.Also更新列不为空。
UPDATE `contacts`
SET `calls_to` = `calls_to`+1,
`cost_to` = `cost_to`+0.25
WHERE `contact_no`='0412345678' AND
calls_to is not null AND
cost_to is not null;
这似乎工作。谢谢:D (注意,我必须将calls_to和cost_to的默认设置为0.) – ajdi 2010-07-29 05:03:56
乍一看查询看起来很好。什么是cost_to
字段的类型?仔细检查它不是一个整数类型,因为你不会得到你正在寻找的结果。 (作为测试,4添加一个较大的值,说,到cost_to。)
我觉得你calls_to
场int和cost_to
场在不同的类型,所以只有你没有得到结果。检查字段的类型。
单表语法:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
多表语法:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
对于单表的语法,在现有行的UPDATE语句更新列用新值命名表。子句SET子句指示要修改哪些列以及应该给出哪些值。每个值都可以作为表达式给出,或者使用关键字DEFAULT将列明确设置为其默认值。 WHERE子句(如果给出)指定标识要更新哪些行的条件。使用否WHERE子句,将更新所有行。如果指定了ORDER BY子句,则按照指定的顺序更新行。 LIMIT子句会限制可更新的行数。
对于多表语法,更新更新table_references中命名的满足条件的每个表中的行。即使匹配条件多次,每个匹配行也会更新一次。对于多表的语法,不能用ORDER BY和LIMIT。
发生了什么事?查询看起来不错。 – mdma 2010-07-29 04:49:00
你能发布你的数据库模式吗?你也可以发布'SELECT * FROM contacts WHERE contact_no ='0412345678''的结果吗?顺便说一下,我认为最好总是添加一个“LIMIT 1”来更新你不希望影响多于一行的更新:) – Hamy 2010-07-29 04:51:12
@mdma:我的猜测是'cost_to'是一个INT数据类型,所以在UPDATE中添加的十进制被截断。我看不出还有什么可能。 ...而你的回答是*所以*不存在。 – 2010-07-29 04:51:13