Как повторить строку в наборе результатов MySQL за указанное время? - PullRequest
2 голосов
/ 13 августа 2011

У меня есть таблица MySQL, подобная этой:

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| id (int primary key) | count (int) |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Предположим, что эта таблица заполнена следующими значениями:

1,1
2,2
3,2
4,3

Мне нужно создать представление этой таблицы, котороеповторяет каждую строку как столбец с номером счета, например, для приведенных выше данных, представление будет содержать эту информацию:

1,1
2,1
2,2
3,1
3,2
4,1
4,2
4,3

1 Ответ

0 голосов
/ 13 августа 2011
drop table if exists my_test;

create table my_test (
id int not null auto_increment primary key,
`count` int)
engine = myisam;

insert into my_test (`count`) values (1),(2),(2),(3);

delimiter //
drop procedure if exists recurrences //
create procedure recurrences()
begin
declare a,b int;
declare i int default 1;
declare finite int default 0;
declare curs cursor for select id,`count` from my_test;
declare continue handler for not found set finite = 1;
drop table if exists tmp;
create temporary table tmp (id int,cnt int);
open curs;
my_loop:loop
fetch curs into a,b;
if finite = 1 then
leave my_loop;
end if;
while i <= b do
insert into tmp (id,cnt) values (a,i);
set i = i + 1;
end while;
set i = 1;
end loop;
close curs;
select * from tmp;
end //
delimiter ;

call recurrences();


+------+------+
| id   | cnt  |
+------+------+
|    1 |    1 |
|    2 |    1 |
|    2 |    2 |
|    3 |    1 |
|    3 |    2 |
|    4 |    1 |
|    4 |    2 |
|    4 |    3 |
+------+------+
8 rows in set (0.44 sec)

Первое, что я подумал, но мне не нравится время исполнения.;)

...