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