2016-08-27 94 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'它什麼?我的意思是什麼是默認*數據類型*? –

相關問題