Crea una nuova tabella che chiameremo risultati che conterrà l'elenco delle tabelle e il valore che memorizzerai (si/no).
La stored procedure sarà cosìcodice:create table risultati ( id int not null auto_increment primary key, tabella varchar(50), valore char(2) ); insert into risultati (tabella) select table_name from information_schema.tables where table_schema = 'nome_database' and table_name <> 'risultati'
Tramite la quale ciclerai tutte le tabelle ad esclusione di quella risultati che verrà popolata all'interno del ciclo.codice:delimiter // create procedure cicla(in k int) begin declare finite int default 0; declare tab varchar(50); declare str varchar(200); declare cur_tabella cursor for select table_name from information_schema.tables where table_schema = 'nome_database' and table_name <> 'risultati'; declare continue handler for not found set finite = 1; open cur_tabella; mio_loop:loop fetch cur_tabella into tab; if finite = 1 then leave mio_loop; end if; set @str = concat("update risultati set valore = case when (select sum(if(matching='si',1,0)) from (select matching from ",tab," order by id limit ",k,") as t) > 0 then 'si' else 'no' end where tabella = '",tab,"'"); prepare stmt from @str; execute stmt; end loop; close cur_tabella; end // delimiter ;
La richiamerai semplicemente così:
call cicla(4);
Ovviamente fatti un dump preventivo e poi testala.

Rispondi quotando