vložení do DTB, použití insert nebo update

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Petr9
Člen | 32
+
0
-

Čau chci se zeptat jak by se dalo nějak elegantně udělat věc kdyz potřebuju vložit radek do dtb, s tím že když už tam řadek s danym id je tak se jen updatuje(zvysise pocet)

Jediny co me napadlo je selectem zjistit zda tam je a pak podle podminky bud insert nebo update

Není něco lepšího?
Dík

ViPEr*CZ*
Člen | 813
+
0
-

No nic lepšího asi nebude… buď tu akci rozliší už sám uživatel nějakou vstupní akcí nebo se holt musí udělat jeden dotaz a podle jeho výsledku se udělat druhý dotaz. Řešil bych to (pokud je to možné) tak, že v DB bych si nastavil unikátnost nad nějakým sloupcem a poté zachytával vyjímku z databáze při pokusu o duplicitní vložení a následně na to bych zkusil update.

ic
Člen | 430
+
+1
-

Něco na tenhle problém ale bylo ne? Já jdu vzpomínat XD

EDIT: už vím… ON DUPLICATE KEY UPDATE, to je přesně ono… provede se 1 dotaz, ve kterém je insert i update, který se provede v případě, že dané id už je zastoupeno,

viz tadyk: http://dev.mysql.com/…plicate.html

Editoval ic (30. 7. 2012 20:51)

jsvelta
Člen | 39
+
-1
-

Elegantné riešeni by mohlo spočívať v tom, že najprv sa pokúsim urobiť update záznamu s konkrétnym id. Metóda Selection->update vráti počet zmenených záznamov. Teda ak je počet zmenených záznamov rovný nule, urobíme insert.

jsvelta
Člen | 39
+
0
-

ON DUPLICATE KEY UPDATE, to je přesně ono…

Na tomto riešení je nepekné to, že keď zmeníš databázu, tak to prestane fungovať.

Petr9
Člen | 32
+
0
-

ON DUPLICATE KEY UPDATE, JO TO JE presne ono dík

jsvelta jo dtb menit namam v planu a kdyz tak to hold predelam=D

Petr9
Člen | 32
+
0
-

Ještě bych se chteěl zeptat když po oeslani formulare delam insert, ale kdyz uz existuje radek s tímto id tak udelam update, ale kdyz ve formulari se odeslou stejny data co sou v dtb, tak se update taky neprovede, jak udelat aby kdyz odesle stejny data co tam jiz sou ulozeny tak aby to nevyhodilo chybu ale program pokracoval dal?