Zvlastny problem pri query() – vykona sa dvakrat
- cuchi
- Člen | 17
Nette 2.04
PHP 5.3
Mojim problemom je, ze mi query uvedenu nizsie vykona celkom dvakrat.
Statement je v poriadku, skusal som ho manualne pustat v yogu.
Dovod pre ktory som sa rozhodol pouzit prave query() je rychlost, pretoze dany
dotaz sa bude vykonavat periodicky nad tabulkou s 10.000+ zaznamamy a
30 stlpcami. Ak existuje nejaka moznost update-u pomocou Nette/Database
v zmysle „cistejsieho“ kodu bol by som rad ak by ste sa so mnou
podelili.
$this->_model->database->query("UPDATE `pokus` SET d = c, c = b, b = a, a = 0");
Povodna tabulka:
id a b c d
---------------------------------
1 1 2 3 4
Ocakavany vysledok
id a b c d
---------------------------------
1 0 1 2 3
Vysledok v praxi
id a b c d
---------------------------------
1 0 0 1 2
Napadlo mi samozrejme aj nieco ako:
$rows = $this->_model->getTable();
foreach($rows as $row) {
$row->d = $row->c
...
$row->update();
}
Samozrejme degradacia v rychlosti je velmi citelna.
Chcel som urobit aj nieco ako:
$this->_model->getTable()->update(array(
'd' => 'c'
...
));
Ale toto nefungovalo vobec.
Existuje samozrejme moznost ulozenia si celej tabulky do php pola. V poli vykonat co treba a potom updatnut ale pride mi to ako posledna moznost a chcel by som prioritne vsetko nechat na databazu.
Editoval cuchi (13. 10. 2012 10:59)
- cuchi
- Člen | 17
Dakujem za pripomenutie procedur, problem vsak zostava kedze aj tak musim
proceduru volat cez query().
Urobil som si maly pokus do query() hodil obycajny insert – vykonal sa
dvakrat. Skusil som to aj s insert() a vysledok je rovnaky. Mne len pride
zvlastne ze ked si program napisem napr takto:
vypisem si tabulku pred update – podla ocakavania
vykonam UPDATE
vypisem si tabulku po update – podla ocakavania
exit;
skontrolujem rucne tabulku v db – query bola vykonana dvakrat
- cuchi
- Člen | 17
Skusil som mozillu (predtym to bol Chrome) a funguje to normalne. To by ma v zivote nenapadlo. Script bude aj tak spustany demonom ale potreboval som to debugovat.
Dakujem za pomoc.
Skusil som incognito mode a funguje to aj v chrome, teda predpokladam ze budto cache alebo nejaky plugin je na vine.