如何在此声明中提出有条件的IF?

时间:2011-07-28 15:57:45

标签: mysql sql if-statement conditional

当提交upvote时,此MySQL将使用户的声誉增加5。

UPDATE  user_profiles
SET     reputation = reputation +5
WHERE   user_id = $question_author_id;

现在我想区分一下:

  • 如果upvote是针对某个问题,则增量应为5,
  • 如果upvote是答案,则增量应为10。

可以通过表 forum_qa 字段 forum_qa_parent_id 中存在整数来确定答案。

所以我想出了这个,但它不起作用:

UPDATE       user_profiles
IF (SELECT   forum_qa_parent_id 
    FROM     forum_qa 
    WHERE    forum_qa_id = $question_id) IS NOT NULL 
    THEN SET reputation = reputation +10 
    WHERE    user_id = $question_author_id;
ELSE SET     reputation = reputation +5 
WHERE        user_id = $question_author_id;
END IF;

任何人都想告诉我如何使这项工作?

1 个答案:

答案 0 :(得分:6)

如果您在查询中进行逻辑比较,则需要使用CASE语句。 http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

UPDATE  user_profiles
SET     reputation = reputation + 
    case when (
        SELECT   forum_qa_parent_id 
        FROM     forum_qa 
        WHERE    forum_qa_id = $question_id) is not null then 10 else 5 end
WHERE   user_id = $question_author_id;

沿着这些方向做某事 - 你可能需要稍微接触一下。