我有这个问题:
$db->prepare("UPDATE users
SET reputation = reputation +
(CASE WHEN id = ? THEN 2
WHEN id = ? AND NOT ? THEN 15 END)
WHERE id IN (?, ?); ")
->execute(array($author_ques_id, $author_ans_id, $isOwnAnswer,
$author_ans_id, $author_ques_id));
请关注这一行:
WHEN id = ? AND NOT ? THEN 15 END)
当 NOT ?
是false (换句话说$isOwnAnswer = true
),reputatuin
的值对于这样的用户将是 NULL
.因为reputation = reputation + NULL
评估 reputation = NULL
.
那么我该如何防止呢?我想要当条件为假时,然后 reputation
不会改变。
最佳答案
不需要用另一个 CASE/COALESCE/IFNULL
或任何东西包装它,只需使用 CASE EXPRESSION
ELSE
,以防万一不满足条件,将使用 ELSE
。
UPDATE users
SET reputation = reputation +
CASE WHEN id = ? THEN 2
WHEN id = ? AND NOT ? THEN 15
ELSE 0
END
WHERE id IN (?, ?);
关于php - 如何在查询中用 0 替换 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37859978/