Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Multiline update

[es] :: MySQL :: Multiline update

[ Pregleda: 1324 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DankoH
Danijel Skok

Član broj: 55253
Poruke: 80
*.adsl.net.t-com.hr.



+1 Profil

icon Multiline update03.02.2011. u 16:45 - pre 160 meseci
Pozdrav svima.


Imam pitanje u vezi update.

Imam tablicu artikli i polje stanje a posto imam puno "skladista" sa razlicitim stanjima korisnik moze odabrat skladiste i odvalit tipku "Obnovi stanja".
Dalje program radi trazenje po ostalim tablicama (dokumentima) i zbraja ulaze-izlaze i dobijem stanja za svaki artikl, odnosno za svaki row u artikli.
To radi tocno samo je sporo do bola jer radim za svaki row update u jednom loop-u.

Ono sto bi ja htio je napunit buffer sa svim updateima i sve odvalit u jednom komadu na MySQL. Googlam i ne nalazim rješenje pa se nadam da mi ovdje neko moze pomoci.
Znaci imam nesto kao:

Code:



do while recordset.eof=false

UPDATE artikli SET stanje = var_stanje WHERE artikli.artikl_id = var_art_id

loop




UPDATE artikli SET stanje = (1,1,1,1) WHERE artikli.artikl_id IN (1,2,3,4)

ovo mi ne radi. Error je da Operand should contain 1 column.

Ima li lijeka?

Unaprijed hvala!

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Multiline update03.02.2011. u 18:08 - pre 160 meseci
za taj upit koji si probao, kako mislis da on pogodi koji broj iz jednog da veze sa brojem iz drugog ..

mozes da uradis nekoliko stvari ... najbolja je da napravis temporary tabelu sa spiskom update-a koje hoces da napravis i onda sa

Code:

UPDATE artikli t INNER JOIN privremena s ON s.artikl_id = t.artikl_id SET t.stanje = s.stanje;


drugo sto mozes da uradis je da napravis bulk insert sa ON DUPLICATE KEY UPDATE ( http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html ) mada je ovo sa temp tabelom po meni bolje resenje.


trece - jaaaaaaaaako lose i sporo resenje je da napravis sa case
Code:

SET stanje = CASE when artikl_id=1 then 100 when artikl_id=2 then 255 when ... end 



 
Odgovor na temu

DankoH
Danijel Skok

Član broj: 55253
Poruke: 80
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Multiline update04.02.2011. u 15:01 - pre 160 meseci
aha kuzim ovo sa privremenom tabelom. ok je tak.

al razmisljam da napravim tabelu "stanja" i u njoj stavim

id
skladiste_id
artikl_id
stanje


i onda ako recimo trazim obnovu stanja za skladiste 1 obrisem sve from stanja where skladiste_id = 1 i onda bulk insert into stanja....

to bi moglo tako funkcionirat.

a kad trazim stanje samo JOIN stanja ON artikli where skladiste_id = 1.


Mislim da cu tako i napravit.


Hvala na pomoci!!!
 
Odgovor na temu

DankoH
Danijel Skok

Član broj: 55253
Poruke: 80
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Multiline update04.02.2011. u 16:30 - pre 160 meseci
evo radi ko metak sa extra tabelom. bit ce to dobro tako


lp
 
Odgovor na temu

[es] :: MySQL :: Multiline update

[ Pregleda: 1324 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.