2016-08-27 48 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语句的条件几乎相同。那么我该如何改进呢?

我的意思是,我怎么可以存储下面的查询到一个变量的结果:

SELECT active FROM users WHERE id = new.author_id; 

,然后用它为这样的那些条件:

IF (IFNULL((@variable & b'1000000' > 0), 0) < 1) THEN 
IF (IFNULL((@variable & b'10000000' > 0), 0) < 1) THEN 
IF (IFNULL((@variable & b'100000000' > 0), 0) < 1) THEN 

我该如何处理呢?

回答

1

声明local variable并将其设置为select语句的输出。

DECLARE v_active bit(10); 
SET v_active := (SELECT active FROM users WHERE id = new.author_id); 
+0

'active'是'BIT(10)'数据类型。 –

+0

我改变了数据类型。 –

+0

谢谢.. upvote ..只是为了我的信息,如果你不'DECLARE'变量和'SET'它什么?我的意思是什么是默认*数据类型*? –

相关问题