我有这个问题:
$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)
什么时候不?为false(换句话说$isOwnAnswer = true),此类用户的reputatuin值为NULL.因为信誉=信誉NULL评估信誉= NULL.
那我该怎么办呢?我希望当条件为假时,声誉不会改变.
解决方法:
无需使用另一个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 (?, ?);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。