SQL PHP update s limitom

Trenkiee

SQL PHP update s limitom
« kdy: 25. 10. 2015, 11:24:01 »
Dobry den.
Chcem pouzit funkciu Update nad velkou tabulkou. Ako to spravit tak aby mi SQL vzdy spracovalo 100 riadkov vratilo vysledok a pokracovalo dalej?
Skusal som pouzit LIMIT ale pri UPDATE to nefunguje ako ma.
Dakujem za nasmerovanie
« Poslední změna: 25. 10. 2015, 21:52:43 od Petr Krčmář »


Rejpal

Re:sql php update s limitom
« Odpověď #1 kdy: 25. 10. 2015, 11:46:10 »
UPDATE nevraci vysledek.

Pred dalsimi dotazy Vam doporucuji https://www.google.cz/search?q=sql+tutorial, chcete-li vec urychlit tak nejprve mozna https://www.google.cz/search?q=sql+tutorial+update.

Bez nutnych zakladu se dal neposunete a budete klast nesmyslne otazky.

Trenkiee

Re:sql php update s limitom
« Odpověď #2 kdy: 25. 10. 2015, 12:08:51 »
Prepacte zle som to napisal.
UPDATE sa ma prerusit po napriklad 100 updatoch pockat ucitu dobu a pokracovat dalej.

perceptron

Re:sql php update s limitom
« Odpověď #3 kdy: 25. 10. 2015, 13:27:11 »
sql to nevie

naprogramujte si to.

Rejpal

Re:sql php update s limitom
« Odpověď #4 kdy: 25. 10. 2015, 13:27:41 »
UPDATE nema limit (v ramci klasickych DBMS).

UPDATE zmeni bud vsechny zaznamy v tabulce nebo vsechny zaznamy v tabulce, ktere vyhovuji podmince.
Existuji sice "pokrocile metody" v nekterych DBMS, ktere vam to dovoli, ale to uz je vyssi divci. Nejprve byste si opravdu mel doplnit nejnutnejsi zaklady.

Predpokladam, ze onen limit ve skutecnosti vubec nepotrebuje. Z jakeho duvodu to chtete provadet tak slozite, diskretne a s cekanim?


Trenkiee

Re:sql php update s limitom
« Odpověď #5 kdy: 25. 10. 2015, 13:38:25 »
Mam toto.
Kód: [Vybrat]
UPDATE ps_product, csv
SET ps_product.price = csv.CENA + 1 
WHERE ps_product.reference = csv.ARUKOD
Beha to nad dvoma tabulkamy kde je cez 600t riadkov a proste mi to nedobehne - trva neskutocne dlho (5 minut)

Re:sql php update s limitom
« Odpověď #6 kdy: 25. 10. 2015, 13:43:42 »
urcite by to slo v aplikacni logice zbastlit formou foreach
1) select
2) for() { update where id in (:ids); wait; }

Zalezi co ti pada. pokud treba PHP tak bys to musel resit pres nejakou queue a k tomu mit frontend s ajaxem nebo to volat cronem.
Vyhodou pouziti framework, v mem pripade Drupalu je to, ze podobnou vec udelam jednoduse pres http://api.drupal.org/batch_set pro frontend nebo pres https://api.drupal.org/api/drupal/modules%21system%21system.queue.inc/group/queue/7 kdyz to chci odbavovat cronem pres drush bez pouziti http serveru.
Děkuji za možnost editace příspěvku.

Rejpal

Re:sql php update s limitom
« Odpověď #7 kdy: 25. 10. 2015, 13:49:44 »
Mate nad sloupecky ps_product.reference a csv.ARUKOD postavene indexy?

Lael.Ophir

Re:sql php update s limitom
« Odpověď #8 kdy: 25. 10. 2015, 13:56:46 »
Na to se používají kurzory. Bohužel MySQL má jen read-only kurzory, takže to buď uděláte z kódu, nebo asi máte smůlu. Zkuste nějaký opravdový DB engine. Podle všeho by měl stačit i PostgreSQL, ale zdarma můžete mít i Oracle Express edition (velikost DB omezena na 11GB, používá max 1GB RAM) a MS SQL Server Express edition (velikost DB omezena na 10GB). Na MS SQL Serveru to vypadá takhle:
http://www.manjuke.com/2011/07/how-to-use-update-cursors-in-sql-server.html

Rejpal

Re:sql php update s limitom
« Odpověď #9 kdy: 25. 10. 2015, 13:58:07 »
A proc pisete

UPDATE ps_product, csv ...

kdyz updatujete jen zaznamy v ps_product?

Trenkiee

Re:sql php update s limitom
« Odpověď #10 kdy: 25. 10. 2015, 15:50:45 »
Indexy mam.
Ide o to ze tabulka csv obsahuje referencne kody a ceny ktore su zhodne ako v ps_produkt. Tie treba poparavat a upravit cenu v ps_produkt

Ivan

Re:sql php update s limitom
« Odpověď #11 kdy: 25. 10. 2015, 21:22:15 »
S MySQL uz dlouho nedelam, pokud ale muzu soudit podle ostanich databazi, tak mas problem plne jinde. Jeden UPDATE byva rychlejsi a efektivnejsi nez kdyz se to rozdeli.

Tomas Holy

Re:sql php update s limitom
« Odpověď #12 kdy: 25. 10. 2015, 21:34:30 »
ja to drive resil v accessu pres SQL primitvne tak, ze jsem prial jeden sloupecek kam jsem cpal nahodne cislo od 0 - 9 a pak jsem postupne pustil  10 dotazu s WHERE rnd = 0, RND = 1 atd

chapu ze to neni systemove ale resilo to presne muj problem ....