我有两个具有不同where
语句的update
查询。
有可能用一个人做这项工作吗?
$sql = "update users set light = replace(light, '" . $clicked . ",', '') where userid = :aid";
$st = $db->prepare($sql);
$st->execute([":aid" => $_SESSION['userid']]);
$sql = "update users set seen = 'seen' where userid = :aid and xfrom = :axfrom";
$st = $db->prepare($sql);
$st->execute([
":axfrom" => $clicked,
":aid" => $_SESSION['userid']
]);
您可以在CASE
表达式的帮助下在一次更新中完成此操作:
UPDATE users
SET
light = REPLACE(light, ?, ''),
seen = CASE WHEN xfrom = :axfrom THEN 'seen' ELSE seen END
WHERE userid = :aid
您的两个更新共享相同的WHERE
逻辑的一部分,因此我们可以保持WHERE
子句不变。对于更新seen
列,我们只在xfrom
条件匹配时进行更改,否则我们不执行。
不确定是否也应该在对REPLACE
的调用中使用占位符,但除此之外,最好使用准备好的语句。