好的,这可能非常简单,但我似乎无法找到答案。 我目前正在尝试清理一些使用一堆select语句的storeod程序,这些语句的变量只会增加数量,例如。 id1,id2,id3,id4,id5,id6,id7和id8。我想将存储过程简化为几行,而不是连续调用24个语句。
现在请原谅我,如果语法是关闭的,不是MySQL程序员的交易。
在我的普通语言中,我会使用变量和附加的控件执行while循环,例如。
while x <= count do
select * from table where col = id[x];
SET x = x + 1;
end;
将控件附加到变量末尾的正确方法是什么?这在存储过程中是否可行? Select语句比显示的语句多一点,但如果我能做一个简单的语句,它将适用于语句的其余部分。
当前使用的代码,这只是代码的一部分。我只是用3个不同的select语句发布一个。目前使用3种不同的基本选择语句。如果我能以某种方式将所有3对1的语句组合起来会很棒但是我对MySQL更新,可能还有更长的时间吗?
if (licount <=2 ) then /* 2 Stations */
select gen_idx into gen_idx1 from j_final_results where line=pline and station=1 and type_result=1 order by ID desc limit 1;
select gen_idx into gen_idx2 from j_final_results where line=pline and station=2 and type_result=1 order by ID desc limit 1;
set gen_idx3=0;
set gen_idx4=0;
set gen_idx5=0;
set gen_idx6=0;
set gen_idx7=0;
set gen_idx8=0;
select scan_lbl into serial1 from j_final_results where line=pline and station=1 and type_result=1 order by ID desc limit 1;
select scan_lbl into serial2 from j_final_results where line=pline and station=2 and type_result=1 order by ID desc limit 1;
set serial3='';
set serial4='';
set serial5='';
set serial6='';
set serial7='';
set serial8='';
select type_result into type1 from j_final_results where line=pline and station=1 order by ID desc limit 1;
select type_result into type2 from j_final_results where line=pline and station=2 order by ID desc limit 1;
set type3=0;
set type4=0;
set type5=0;
set type6=0;
set type7=0;
set type8=0;
答案 0 :(得分:1)
你需要做一些动态代码创建,我首选的方法看起来像这样:
WHILE X <= COUNT DO
SET @sql = CONCAT('select * from table where col = id',X);
PREPARE runme FROM @sql;
EXECUTE runme;
DEALLOCATE PREPARE runme;
SET X = X + 1;
END;
你也可以放一个?在@sql字符串中并使用USING传递X - 请参阅此处:sql-syntax-prepared-statements