Autor | Zpráva | ||
---|---|---|---|
Paja222 Profil |
#1 · Zasláno: 3. 9. 2013, 17:38:13
Zdravím,
potřebuji poradit, zda jde v jednom dotazu vložit do db více záznamů. Dotazy mám typu: INSERT INTO tabulka SET a=1, b=2 Stávající systém funguje tak, že se do databáze vkládá řádek po řádku, ovšem při množství 10 000 řádků je to nevhodné. Tento systém jsem dostal na optimalizaci aby fungoval jak má, takže ho nemohu celý předělat :-) Co ještě zbývá dodat - že tento dotaz je volán naštěstí pouze cronem 1x denně. Děkuji za jakoukoliv pomoc, jak tento problém vyřešit. |
||
tiso Profil |
#2 · Zasláno: 3. 9. 2013, 17:41:47
Paja222: Nerozumiem prečo nemôžeš použiť „(a,b) VALUES (1,2),(3,4)“ syntax.
|
||
Tori Profil |
#3 · Zasláno: 3. 9. 2013, 17:46:35
Jestli to generujete z pole sloupec => hodnota, tak stačí pomocí array_keys vytáhnout názvy sloupců a pak jen cyklem dosazovat hodnoty (a hlídat délku výsledného SQL, aby nepřekročilo limit).
|
||
Paja222 Profil |
Tori: Problém je ten, že to generuje v poli - asociovaným. Klíč = název sloupce, hodnota = hodnota. A každé pole má jiná data.
Příklady: $a['a'] = 1 $a['b'] = 2 $b['d'] = 3 $b['e'] = 4 $c['a'] = 3 Prostě každé pole není kompletní a má rozdílný počet prvků. Není tedy způsob, jak to zapisovat tak, aby to fungovalo. Leda si v první závorce vypsat všech 90 sloupečků (ručně) a poté testovat jedno po druhém a podle toho je přiřazovat do druhé tabulky za VALUES, ale obávám se, že toho by bylo horší, než je to udělané nyní. |
||
tiso Profil |
#5 · Zasláno: 3. 9. 2013, 18:23:17
Paja222: aha, čo to teda je za tabuľku?
Ak teda musíš použiť SET syntax, tak by si mal ten insert riešiť dávkovo - nevkladať naraz 10000 riadkov, ale 10x po 1000 alebo iný počet, podľa toho, ako dlho tie inserty budú trvať. Treba vyskúšať. |
||
Paja222 Profil |
#6 · Zasláno: 3. 9. 2013, 18:30:05
tiso: Něco velmi podobného katalogu firem. Musím se přiznat, že jsem všechny data ještě v jedný tabulce neviděl a už doufám, že neuvidím. Je to nepřehledné a zbytečně se s tím špatně pracuje. Díky tedy, dám inserty alespoň za sebe. A měl bych ještě jeden dotaz, mohlo by tomu pomoci poslat to do db přes mysqli multi_query v jednom dotazu, nebo to nemá vliv?
Dík. |
||
tiso Profil |
#7 · Zasláno: 3. 9. 2013, 18:42:32
multi_query by malo pomôcť, sprav si benchmark.
|
||
Alphard Profil |
#8 · Zasláno: 3. 9. 2013, 19:39:18
Paja222:
Co třeba provést jeden select, vytáhnout si názvy sloupců a do nepotřebných dát null ?
|
||
Kajman Profil |
#9 · Zasláno: 3. 9. 2013, 19:50:15
Místo null, spíš DEFAULT.
Také jde udělat více víceřádkových insertů, pro každou kombinaci nastavených sloupečků jeden. |
||
Paja222 Profil |
#10 · Zasláno: 3. 9. 2013, 20:36:02
Alphard:
To vůbec není špatný nápad, názvy sloupců jsou klíče v poli, tak to půjde snadno kontrolovat a doplňovat. Díky za nápad :-) Kajman: To by bylo zase víc a víc filtrů - vem si, že řádku je 10 000, tam by se ukázaly snad všechny kombinace, jakých je hodně :-) |
||
Časová prodleva: 11 let
|
0