MySQL - 组合2个具有不同SET和WHERE子句的查询

时间:2011-07-31 02:41:50

标签: mysql sql sql-update where

前一段时间@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;
");

我想知道这是否可以组合成单个查询,或者是否需要进一步规范化。此外,这些连续查询效率太低吗?如果没有,我不打算尝试合并为一个查询。

非常感谢您对此的看法。

3 个答案:

答案 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个查询来实现代码可读性,除非效率非常重要。