Forum » Programiranje » [PHP + mysql] Kako vstaviti več vrstic naenkrat ?
[PHP + mysql] Kako vstaviti več vrstic naenkrat ?
blackmumba ::
while ($row = @mysql_fetch_array($sql)){
$i = $row["IDvsebina"];
$key = $row["keyword"];
$vsebina = vpisi_vsebino($i,$key);
mysql_query("UPDATE tralala SET vsebina='$vsebina' WHERE IDproduct='$IDproduct' AND key='$key'")
or die(mysql_error());
}
v primeru da se mi to vpiše 1000x, traja to ful časa oz. več kot 30sekund kot mi server dovoljuje.
v primeru da se vpise 500x se stvar zakluci pred 30sekundami
Kako bi recimo to vse izvedel z enim mysql_querijem ??
$i = $row["IDvsebina"];
$key = $row["keyword"];
$vsebina = vpisi_vsebino($i,$key);
mysql_query("UPDATE tralala SET vsebina='$vsebina' WHERE IDproduct='$IDproduct' AND key='$key'")
or die(mysql_error());
}
v primeru da se mi to vpiše 1000x, traja to ful časa oz. več kot 30sekund kot mi server dovoljuje.
v primeru da se vpise 500x se stvar zakluci pred 30sekundami
Kako bi recimo to vse izvedel z enim mysql_querijem ??
- spremenil: blackmumba ()
Jebiveter ::
Glede na to, da imas tukaj iz enega queryja v drugega prenesene podatke, rajs naredi loop v SQL-u, se pravi kot en query.
Certainty of death. Small chance of success. What are we waiting for?
Zgodovina sprememb…
- spremenilo: Jebiveter ()
kopernik ::
Kakšen je tvoj worst-case scenarij ? Torej, ali je lahko vpisov deset tisoč ? sto tisoč ?
blackmumba ::
večinoma od 500 - 1500, lahko se pa zgodi tudi 2000. Več ne.
poskusil sem tudi max execution time povečat s htaccessom.
php_value max_execution_time 3160
php_value memory_limit 128M
brez učinka.
LP
poskusil sem tudi max execution time povečat s htaccessom.
php_value max_execution_time 3160
php_value memory_limit 128M
brez učinka.
LP
Jebiveter ::
-Lan-, osebno sicer se nisem imel potrebe po programiranju v SQL-u (razen pac standardnih SELECT/INSERT/UPDATE/itd. statementov), vem pa da sem se enkrat igral z procedurami v PostgreSQL (pac, experimetiral malo).
Sem najdu se za mysql to kar rabis oz. kje lahko zacnes.
Sem najdu se za mysql to kar rabis oz. kje lahko zacnes.
Certainty of death. Small chance of success. What are we waiting for?
kopernik ::
Če zadeva predolgo traja in se je ne da pohitriti, jo moraš izvesti asinhrono. Žal PHP zelo slabo poznam, zato ti ne morem kaj svetovati(niti glede optimizacije niti glede vzporednega izvajanja ...).
rokpok ::
Najboljše bo, da uporabiš MySQL stored procedures. Sicer se sam še nisem poglabljal v to, mislim pa, da ti bo primer na tem linku pomagal.
Lp
Lp
Rad bi bil pingvin.
Seadoo ::
Stored procedures pridejo v poštev le od verzije 5.0.1 naprej, če imaš probleme z predolgim izvajanjem potem daj na začetek php skripte set_time_limit(0); ukaz. To pomeni, da ni časovne omejitve. Navsezadnje, tudi če boš pognal proceduro v mysql bazi in bo trajala predolgo, se ti PHP skripta ne bo izvedla do konca. Jaz za take obdelave, ki so sicer zelo redke, a porabijo dolgo časa, uporabim set_time_limit().
Out of my mind. Back in five minutes.
frudi ::
če imaš možnost, prestavi funkcijo 'vpisi_vsebino(i, key)' na server. tako boš lahko operiral s celotnim setom podatkov naenkrat, ne le s posameznimi vrsticami. recimo "UPDATE tralala SET vsebina = vpisi_vsebino(IDvsebina, keyword)", ali kakorkoli bi že izgledala sintaksa v mysql. nimam pa pojma, kako je s podporo funkcijam in stored proceduram v mysql-u... :)
kot drugo, postavi indekse na stolpca IDvsebina in keyword
kot drugo, postavi indekse na stolpca IDvsebina in keyword
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
Seadoo ::
Frudi, z indeksi je treba bit previden. Upočasnijo vstavljanje in brisanje zapisov, ker je potrebno vsakič ažurirat indeks, pohitrijo pa iskanje, ker hitreje pridemo do željenih zapisov. Indeksi bi v tem primeru prišli v poštev na poljih IDproduct in key (odvisno od dejanskih podatkov v tabeli), sigurno pa ne na polju vsebina. Ampak to velja za ta stavek, celotna postavitev indeksov je odvisna od uporabe te tabele skozi celoten sistem.
Out of my mind. Back in five minutes.
frudi ::
pardon, seveda bi bil smiselen indeks na polju IDprodukt, ne IDvsebina. sem bral površno in spregledal, da je v where pogoju update stavka produkt in ne vsebina :)
z indeksi je pa absolutno treba biti previden; ampak tipično vstavljanje v tabelo ni toliko problematično, ker se običajno vstavlja majhno število posameznih vrstic naenkrat. tako se običajno splača žrtvovati hitrost vpisovanja na račun hitrejšega iskanja zapisov za select/update.
je pa res, da je težko takole pametovati, če ne poznamo strukture in uporabe baze. sem pa vendarle takoj, ko sem videl, kako počasi se izvaja (več kot pol minute za update 1000 zapisov), pomislil, da so tabele slabo, če sploh, indeksirane.
p.s. a tole while ($row = @mysql_fetch_array($sql))
gre za vsako vrstico posebej brati iz baze ali prebere vse naenkrat? nimam pojma o php, zato sprašujem :)
z indeksi je pa absolutno treba biti previden; ampak tipično vstavljanje v tabelo ni toliko problematično, ker se običajno vstavlja majhno število posameznih vrstic naenkrat. tako se običajno splača žrtvovati hitrost vpisovanja na račun hitrejšega iskanja zapisov za select/update.
je pa res, da je težko takole pametovati, če ne poznamo strukture in uporabe baze. sem pa vendarle takoj, ko sem videl, kako počasi se izvaja (več kot pol minute za update 1000 zapisov), pomislil, da so tabele slabo, če sploh, indeksirane.
p.s. a tole while ($row = @mysql_fetch_array($sql))
gre za vsako vrstico posebej brati iz baze ali prebere vse naenkrat? nimam pojma o php, zato sprašujem :)
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
Zgodovina sprememb…
- spremenilo: frudi ()
Ziga Dolhar ::
> p.s. a tole while ($row = @mysql_fetch_array($sql))
gre za vsako vrstico posebej brati iz baze ali prebere vse naenkrat? nimam pojma o php, zato sprašujem :)
Tole pofetcha vrstico-za-vrstico iz resursa, ki vsebuje celoten set rezultatov [in torej ne gre po vsako vrstico posebej prav v bazo].
gre za vsako vrstico posebej brati iz baze ali prebere vse naenkrat? nimam pojma o php, zato sprašujem :)
Tole pofetcha vrstico-za-vrstico iz resursa, ki vsebuje celoten set rezultatov [in torej ne gre po vsako vrstico posebej prav v bazo].
https://dolhar.si/
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | HTML in SQL pomoč (strani: 1 2 )Oddelek: Programiranje | 7687 (6565) | def0r |
» | unset cookieOddelek: Izdelava spletišč | 1874 (1681) | tomitza |
» | [mysql] malo bolj zahtevna poizvedbaOddelek: Programiranje | 1597 (1448) | destiny |
» | Kaj je narobe tu...(php)Oddelek: Programiranje | 1202 (1100) | teac |
» | PHP help!Oddelek: Programiranje | 1742 (1580) | rc-car |