我有两个update
语句,其中有不同的where
语句。
一个人可以完成这项工作吗?
$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']
]);
答案 0 :(得分:2)
您可以借助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
的调用中是否也应使用占位符,但除此之外,最好使用准备好的语句。