Как я могу сделать динамическое значение для обновления? - PullRequest
0 голосов
/ 08 мая 2018

Вот мой текущий запрос: (это триггер)

UPDATE qanda SET closed = COALESCE(closed, 0) + 1 WHERE id = new.qanda_id

Теперь мне нужно сделать его более продвинутым. В настоящее время оно всегда увеличивается + 1. Я хочу присоединиться к таблице users и проверить следующее:

  1. если role_id == 1, то + 5
  2. если reputation > 5000, то + 5

Как я могу это сделать?


Вот что я сделал. Я хочу сделать это с CASE WHEN (как?)

BEGIN

SELECT reputation, role_id INTO @reputation , @role_id FROM users WHERE id = new.user_id;

IF (@reputation >= 5000 OR role_id == 1) THEN
    UPDATE qanda SET closed = COALESCE(closed, 0) + 5 WHERE id = new.qanda_id;
ELSE
    UPDATE qanda SET closed = COALESCE(closed, 0) + 1 WHERE id = new.qanda_id;
END IF

END

Ответы [ 2 ]

0 голосов
/ 08 мая 2018
update qanda q, users u 
set q.closed=COALESCE(q.closed, 0) + if((u.reputation >= 5000 OR u.role_id = 1),5,1)
where q.id = u.qanda_id 
0 голосов
/ 08 мая 2018

Вы можете сделать это, используя один UPDATE:

UPDATE qanda q JOIN
       users u
       ON q.id = new.qanda_id AND u.id = new.user_id
    SET q.closed = COALESCE(q.closed, 0) + 
                   (CASE WHEN u.reputation >= 5000 OR u.role_id = 1 THEN 5 ELSE 1 END);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...