Php 用一个查询更新多行
我有一张这样的桌子:Php 用一个查询更新多行,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我有一张这样的桌子: optionId - optionName - optionValue 1 paypalEnv // empty right now 2 paypalClientId // empty right now 3 paypalSecret // empty right now 我想用1个查询更新所有行,如下所示:更新选项集paypalEnv=?,paypalClientId=?,
optionId - optionName - optionValue
1 paypalEnv // empty right now
2 paypalClientId // empty right now
3 paypalSecret // empty right now
我想用1个查询更新所有行,如下所示:更新选项集paypalEnv=?,paypalClientId=?,paypalSecret=?我想您正在寻找以下查询:
UPDATE options SET optionValue = CASE
WHEN optionName = 'paypalEnv' THEN value1
WHEN optionName = 'paypalClientId' THEN value2
WHEN optionName = 'paypalSecret' THEN value3
ELSE optionValue
END
WHERE optionId in (1,2,3)
您还可以将WHERE子句替换为以下内容:
WHERE optionName in ('paypalEnv','paypalClientId','paypalSecret')
或者,更简单地说
UPDATE options SET optionValue =
CASE optionName
WHEN 'paypalEnv' THEN value1
WHEN 'paypalClientId' THEN value2
WHEN 'paypalSecret' THEN value3
ELSE optionValue
END
WHERE optionId in (1,2,3)
如果您在
(optionId,optionName)
上有唯一或主键,则可以使用IODKU:
INSERT INTO options (optionId, optionName, optionValue) VALUES
(1, 'paypalEnv', ?)
(2, 'paypalClientId', ?)
(3, 'paypalSecret', ?)
ON DUPLICATE KEY UPDATE
optionId = VALUES(optionId),
optionName = VALUES(optionName),
optionValue = VALUES(optionValue)
你试过了吗?没有WHERE子句的UPDATE将更新所有行。@aynber我知道我可以使用WHERE子句,但是我可以对多个ID使用WHERE子句吗?如果它们都是相同的值,则是。如果没有,那么我建议你给出下面的答案。然后你可以接受这个答案,很高兴能帮助你,从你的提问中获得乐趣;)我能知道这个查询叫什么吗?这是一个经典的“case-when-statement”更新,对于这样一个queryGood-old-IODKU没有特定的名称。