Mysql 选择变量中引用的列

Mysql 选择变量中引用的列,mysql,triggers,Mysql,Triggers,我目前正在开发一个MySQL触发器(这很重要,因为它排除了PREPARE/EXECUTE组合),该触发器获取神奇宝贝的类型并查找它与另一个给定类型的关联。下面是我正在使用的触发器片段: select `type1`,`type2` into @t1,@t2 from `data_pokemon` where `formeid`=new.`formeid`; set @t3 = 'electric'; -- actually obtained from another select que

我目前正在开发一个MySQL触发器(这很重要,因为它排除了
PREPARE/EXECUTE
组合),该触发器获取神奇宝贝的类型并查找它与另一个给定类型的关联。下面是我正在使用的触发器片段:

select `type1`,`type2` into @t1,@t2
    from `data_pokemon` where `formeid`=new.`formeid`;
set @t3 = 'electric'; -- actually obtained from another select query
set @q = concat(
    'select `',@t1,'`',
    if(@t2 is null,'/2',concat('*`',@t2,'`/4')),
    ' into @aff from `data_types` where `attack`=?'
);
prepare tmp from @q;
execute tmp using @t3;
deallocate prepare tmp;
现在,正如我提到的,这是一个触发器。因此,上面的代码不起作用


我真正能做的是选择一行,然后将其视为某种关联数组,这样我就可以访问
@typerow[@t1]
。这样的事情存在吗?

我认为最接近你的是一个巨大的案例陈述:

select (case when @t1 = 'col1' then col1
             when @t1 = 'col2' then col2
        . . .
        end
       ) . . .

需要注意的是,这会将所有列转换为同一类型。

作为旁白:似乎您正在尝试将大量业务逻辑推送到数据库层。。。您确定这是适合您的应用程序的体系结构吗?更重要的是,您可以通过采用替换许多不同的“类型”列来完全避免此问题。是的,您可能是对的。我已经用PHP重写了这一部分,我只需要确保在调用触发器时进行适当的更新。