mysql - 如何将查询结果存储到变量中并多次使用它?

标签 mysql sql stored-procedures

我有一个查询(触发),如下所示:

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

我该如何处理?

最佳答案

声明一个 local variable 并使用 select 语句的输出来设置它。

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

关于mysql - 如何将查询结果存储到变量中并多次使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186735/

相关文章:

尝试创建过程时 MySQL 抛出错误 "Statement is incomplete expecting if"

php - "Change DB Prefix"wordpress 插件错误/问题 : redirecting all HTTP traffic to/wp-admin/install. php

java - 我怎样才能正确地做到这一点,以便能够在 DBSelectQuery 类中进行选择?

sql - 根据小时过滤窗口函数

sql-server - 如何使动态 SQL 插入 'date' 变量?

sql-server - 存储过程结果存入 Azure 数据仓库中的临时表

mysql - 基于行值的不同选择语句

Mysql根据时间列出记录

sql - 存储图像 - SQL DB 与 Azure Blob 存储

sql - 坚持将 SQL 查询链接在一起