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

时间:2018-11-01 04:43:28

标签: php mysql

我有两个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']
]);

1 个答案:

答案 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的调用中是否也应使用​​占位符,但除此之外,最好使用准备好的语句。