Autor Zpráva
Radim24
Profil *
Ahoj.
Mám takový dotaz. Potřebuju udělat update několika záznamů v jednom příkazu. mysql_query(UPDATE...; UPDATE;... UPDATE...);
Nejdříve jsem zkoušel po jednom UPDATE, a potom po dvou. V phpmyadminovi to správně uloží data. Píše, že uložil dva záznamy.
Když to potom zkouším ještě jednou - opakovat odeslání toho samého požadavku, tak to pak píše že žádné změny neprovedl... No, a když to samé zkouším přes svoji php stránku, tak to píše že žádný záznam nebyl uložen. Ale jednotlivě by to šlo. Tak se chci zeptat jestli nevíte, v čem by mohla být chyba a jestli se to vyplatí psát vícero UPDATE do požadavku, nebo jestli to mám volat jednotlivě mysql_query(UPDATE...;) a volat to z cyklu, který může mít třeba 20-50 opakování.
Díky za radu
djlj
Profil
Když to potom zkouším ještě jednou - opakovat odeslání toho samého požadavku, tak to pak píše že žádné změny neprovedl...
To je jasné, proč by ty změněné hodnoty měnil znovu na to samé?!
Radim24
Profil *
Dobře, tak to jsem si myslel. Ale nechápu jak to že přes phpadmina to odešle vícenásobně, ale přes moji stránku ne. Zdá se mi to jednoduché - jen mysql_query(UPDATE...; UPDATE...;) tak netuším kde může být chyba.
Jo a nenapadá vás jestli se dá z výsledku funkce mysql_querry() zjistit kolik záznamů správně aktualizoval?
djlj
Profil
Radim24
To netuším, nikdy jsem neměl potřebu ten dotaz takto upravovat. Snad poradí někdo jiný.

Počet aktualizovaných záznamů zjistíš pomoci mysql_affected_rows();.
Radim24
Profil *
Skvělé, díky
Radim24
Profil *
A nevíte někdo, když to tedy budu volat po jendom UPDATE v cyklu, nebude to horší (např. pomalejší) než když bych to volal jedním mysql požadavkem?
WanTo
Profil
Radim24
Možná o trochu, ale nebude to téměř znát.
Nox_lbc
Profil
Já takhle (cyklem) UPDATUJU jeden sloupec cca 65000 řádků a trvá mi to jen 30sekund ;-)
Radim24
Profil *
Radim, díval jsem se jak to je udělané v Phpadminu. Zmátlo mě to, že po proveddení sql se píše string: UPDATE... UPDATE..., ale když jsem se díval do střev, zjístil jsem, že je to dělané přes foreach, kde v poli jsou jednotlivé požadavky pro update, takže je to jasné, jinak než přes cyklus to nejde.
Radim24
Profil *
To Nox_Ibc tož to si dobrý borec :-)
ninja
Profil
Hlavne bych se zkusil zamyslet jestli to nejde cele zapsat do jendnoho UPDATU (byt se slozitejsi klauzuli SET a WHERE).
24_work
Profil *
presne tak od toho update je - aby pouzival SET a WHERE
Nox_lbc> borec? ;-) spis blazen ale aspon se behem te akce stihne napit kafe ;-)
Joker
Profil
ninja
No přesně... proč volat tolik UPDATE, nešlo by to napsat jedním??
Nox_lbc
Profil
spis blazen ale aspon se behem te akce stihne napit kafe ;-)

A nejen to ;-) tu ukousnu banán či párek v rohlíku a UPDATE je hotov ;-) ...
Radim24
Profil *
To ninja
Jde o editaci položek, kde může být na jedné stránce vypsáno i 25 záznamů. To není málo, tak nevím jestli bych to mohl dát do jednoho UPDATE.
Joker
Profil
Radim24
Teď jsem nějak nepochopil v čem vidíte problém.
mila
Profil
Od jisté verze php nelze pomocí jedné mysql_query volat více dotazů. Má to snad být obrana před sql injection.
V mysqli je na to ale myslím fce.
Radim24
Profil *
No příjde mi divné, skládat tak dlouhý požadavek mysql_query(UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);UPDATE table (col1,..., col6) set (val1,...val6) where (condition);.................);

nění to dlouhé (apropos nevím jestli to mám dobře zapsané, asi by to mělo být trošku jinak....)
tiso
Profil
Radim24
Od čoho máme cykly?
Radim24
Profil *
No, vždyť jsem to říkal, že to radši udělám cyklem, než to cpát všechno do jednoho příkazu.
Toto téma je uzamčeno. Odpověď nelze zaslat.