使用不同的where语句连接两个查询



我有两个具有不同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的调用中使用占位符,但除此之外,最好使用准备好的语句。

最新更新