Как сделать условное ЕСЛИ ПОТОМ на это утверждение? - PullRequest
2 голосов
/ 28 июля 2011

Этот MySQL повысит репутацию пользователя на 5 при отправке отзыва.

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

Теперь я хочу провести различие:

  • если ответ на вопрос задан, шаг должен быть 5,
  • если ответ идет за ответ, приращение должно быть 10.

Ответ можно определить по наличию целого числа в поле forum_qa_parent_id таблицы forum_qa .

Итак, я придумал это, но оно не работает:

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 Ответ

6 голосов
/ 28 июля 2011

Вам нужно использовать оператор 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;

Что-то в этом роде - вам может понадобиться немного подправить его.

...