Získání dat celé databáze - SqlFiddle Demo
Získání dat pouze z jedné tabulky - - SqlFiddle Demo
Udělal jsem složité, ale přijatelné řešení. Potřebuje však zlepšení .
Toto je složitá procedura se složitým kódováním, zejména dotaz, který načte všechny řádky všech sloupců do jednoho výsledku pomocí group_concat
a formáty se složitým zřetězením.
Potřebujete to zjednodušené, efektivní a fungující ve všech scénářích.
Některé podrobnosti o mém řešení :Následuje důležitá část, další jsou jen podmínky/smyčkování (nejsem zručný s dokumentací, také to chce čas a návrhy, někdo by mi mohl pomoci s formátováním a vylepšením, omlouvám se za případné nepříjemnosti, nicméně budu rád za každou pomoc od tebe a mě)
Poznámka:group_concat(yourColumn separator ' --anySeparator-- ') slučuje všechny řádky vašeho sloupce do jednoho tak, že řádky jsou odděleny --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];
1 :názvy sloupců jsou získány jako jedna hodnota oddělená
`,` => @cs1 = id`,`ename`,`did
select group_concat(column_name separator '`,"\',\'",`') into @cns2
from information_schema.columns where table_schema=dn and [email protected];
2:názvy sloupců jsou získány jako jedna hodnota oddělená znakem
`','` => @cn2 = id`','`ename`','`did
set @cns1=concat("`",@cns1,"`"); set @cns2=concat("`",@cns2,"`");
3:Chybějící písmeno (`) je umístěno na začátek a konec názvů sloupců
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
4:Jednoduše provede vložení res= " insert into emp(
`id` ,
`ename` ,
`did` ) values("
Zde můžete vidět, proč jsem vložil oddělovače (je dosaženo formátování MySql)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
from ",dn,".",@tn, " into @temp");
Výše uvedené je nejdůležitější prohlášení Získá všechny datové řádky z tabulky jako řádky jednoho sloupce a dále jsou tyto řádky sloučeny tak, že jsou odděleny '),('
5.1 concat(",@cns2,")
získá hodnoty všech sloupců v jednom.
5.2 Po vnějším nejvíce concat nyní @q je
@q = "select group_concat(`id`','`ename`','`,did` separator '),(' from
mydb.emp into @temp";
5.3:group_concat sloučí všechny řádky tohoto kombinovaného sloupce do jedné hodnoty. Hodnoty sloupců budou spojeny pomocí oddělovačů existujících v @cns2 a spojení na úrovni řádků bude s '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");
@q se provede
set @res = concat(@res,@temp,");");
6:A dostaneme výsledek jako
res was = insert into emp(`id`,`ename`,`did`) values ('
@temp = 1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3
A za @res = concat(@res,@temp,");");
dostáváme
insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);