前一段时间@Richard Harris gave a great answer for a similar question,但我相信我的情况略有不同。
正如您所看到的,我有2个连续的UPDATE语句,这些语句针对相同的表和字段,但具有不同的SET和WHERE子句。
$this->db->query("
UPDATE user_profiles
SET reputation = reputation + 15
WHERE user_id = $answer_author_id;
");
$this->db->query("
UPDATE user_profiles
SET reputation = reputation + 2
WHERE user_id = $user_id;
");
我想知道这是否可以组合成单个查询,或者是否需要进一步规范化。此外,这些连续查询效率太低吗?如果没有,我不打算尝试合并为一个查询。
非常感谢您对此的看法。
答案 0 :(得分:2)
你可以这样做:
UPDATE user_profiles
SET reputation = reputation +
case when user_id = $answer_author_id then 15
when user_id = $user_id then 2
else 0
end
WHERE user_id = $answer_author_id or user_id = $user_id;
答案 1 :(得分:1)
解决方案实际上与this one没有太大区别,只是有点嵌套。
UPDATE my_table SET reputation =
IF( USER_ID = $user_id, REPUTATION + 2, REPUTATION + 15 )
WHERE USER_ID IN ( $user_id, $answer_author_id );
答案 2 :(得分:1)
更新user_profiles SET信誉=声誉+ IF(user_id = $ answer_author_id,15,2) WHERE user_id = $ answer_author_id OR user_id = $ answer_author_id;
这很有效,但我建议仅使用2个查询来实现代码可读性,除非效率非常重要。