MySQL难题:如何在循环中组合结果?
到目前为止,我已经尝试过使用MySQL难题:如何在循环中组合结果?,mysql,stored-procedures,Mysql,Stored Procedures,到目前为止,我已经尝试过使用创建视图和 创建表和创建临时表 这个方法花费了很多时间,因为我必须(步骤1)创建一个表,并(步骤2)插入一个数据。然后(步骤3)选择创建的表。最后,(步骤4)删除表 这是我的过程:(我的程序看起来毫无意义,我是说我为什么要这样做。你困惑的答案是,这只是我大型代码的一部分,我这样做是为了让它看起来简单。) 结果是: 问题: 结果是不同的。如何将此结果合并到一个表中?在开始时声明一个临时表,将数据填充到临时表中,然后在循环结束后访问它 BEGIN --
创建视图
和创建表
和创建临时表
这个方法花费了很多时间,因为我必须(步骤1)创建一个表,并(步骤2)插入一个数据。然后(步骤3)选择创建的表。最后,(步骤4)删除表
这是我的过程:(我的程序看起来毫无意义,我是说我为什么要这样做。你困惑的答案是,这只是我大型代码的一部分,我这样做是为了让它看起来简单。)
结果是:
问题:
结果是不同的。如何将此结果合并到一个表中?在开始时声明一个临时表,将数据填充到临时表中,然后在循环结束后访问它
BEGIN
-- Main loop variables
DECLARE col_Name varchar(255);
DECLARE col_Description varchar(255);
create temporary table yourtable (name varchar(50),description varchar(50));
-- Main Loop
Block2: BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE statement CURSOR FOR SELECT `name`, `description` FROM `rules`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN statement;
REPEAT
MainLoop: LOOP
FETCH statement INTO col_Name, col_Description;
IF done THEN
LEAVE MainLoop;
END IF;
insert into yourtable(name,description)
values (col_Name, col_Description)
END LOOP MainLoop;
UNTIL done END REPEAT;
CLOSE statement;
select * from yourtable
END Block2;
-- End of Main Loop
END
我想事情会容易一些
您不必使用游标,只需在过程中创建一个空表,然后输入查询结果
如下图所示:
CREATE DEFINER=`root`@`localhost` PROCEDURE `temp`(val int)
BEGIN
DECLARE yourval datatype()
-- declare as many as you need.---
set @beginning = 0
set @ending = val
-- how many time do you need to repeat your code?
---CREATE AN EMPTY TABLE HERE---
while @beginning < @ending do
insert table TableCreatedAbove
---YOUR QUERY---
---YOU MAY NEED TO DO SOMETHING WITH YOUR DECLARED VARIABLE---
set @beginning = @beginning + 1;
end while;
commit;
END
也许你已经在其他地方解决了你的问题,但我的答案是。光标和循环似乎没有任何作用。为什么不从规则中选择名称,说明?谢谢你花时间回答。你觉得表和视图怎么样?他们的方法是一样的,对吗?你认为哪一个最快?如果你只想在表中显示结果,那么为什么要使用表和视图?临时表在使用后可以删除,如果正确,也可以接受答案。我在我的描述中说,我已经尝试过该方法。使用临时的。我仍然在寻找更好的答案。谢谢
CREATE DEFINER=`root`@`localhost` PROCEDURE `temp`(val int)
BEGIN
DECLARE yourval datatype()
-- declare as many as you need.---
set @beginning = 0
set @ending = val
-- how many time do you need to repeat your code?
---CREATE AN EMPTY TABLE HERE---
while @beginning < @ending do
insert table TableCreatedAbove
---YOUR QUERY---
---YOU MAY NEED TO DO SOMETHING WITH YOUR DECLARED VARIABLE---
set @beginning = @beginning + 1;
end while;
commit;
END
select * from TableCreatedAbove