2016-08-28 3 views
0

Вот мой код:Как сохранить результат запроса в переменной?

BEGIN  
    IF (new.edited_id IS NULL) THEN 
     IF (SELECT 1 FROM users WHERE id = new.author_id AND IFNULL((active & b'1000000' > 0), 0) < 1) THEN 
      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "you cannot ask anymore"; 
     ELSEIF (SELECT 1 FROM users WHERE id = new.author_id AND IFNULL((active & b'10000000' > 0), 0) < 1) THEN 
      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "you cannot answer anymore"; 
     END IF; 
    ELSE 
     IF (SELECT 1 FROM users WHERE id = new.author_id AND IFNULL((active & b'100000000' > 0), 0) < 1) THEN 
      SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "you cannot edit anymore"; 
     END IF; 
END 

Как вы видите, условия этих внутренних IF утверждений почти то же самое. Итак, как я могу его улучшить? Я имею в виду, как я могу сохранить результат этого запроса в переменной, а затем использовать эту переменную в качестве условий?

ответ

0

Теперь вы можете использовать переменную condition в случае утверждения

SET @condition := (SELECT 1 FROM users WHERE id = new.author_id AND IFNULL((active & b'1000000' > 0), 0) < 1); 
+0

Существует три разных номера: '& b'1000000'',' & b'10000000'' и '& b'100000000''. –

+0

ОК, я этого не заметил. В этом случае все запросы имеют разные результаты. Поэтому мы не можем использовать одну переменную для всех, если условия – jophab

Смежные вопросы