Autor | Zpráva | ||
---|---|---|---|
Scrash66 Profil * |
#1 · Zasláno: 29. 11. 2012, 08:47:14
Dobrý den, potřebuji poradit, jak napsat dotaz pro UPDATE například 60 řádků s různými daty - pouze jedním dotazem
Mám pole, ve kterém jsou specifikované 3 vlastnosti: $pole = array( 1 => array( x => 1, y => 1, p => 1 ), 2 => array( x => 2, y => 1, p => 15 ), atd.... ) Tyto data potřebuji upravit v DB, ale nevím, jak vygenerovat SQL dotaz, kdybych to projel foreachem a UPDATOVAL kazdy radek zvlast (SET property=$p WHERE posX=$x AND posY=$y) tak updatuju az 2400 zaznamu, coz je moc. Poradíte někdo? |
||
Kajman Profil |
#2 · Zasláno: 29. 11. 2012, 08:53:43
Několik řešení je na
http://php.vrana.cz/hromadna-aktualizace-zaznamu.php možná tam chybí ještě varianta s insertem do pomocné (temporary) tabulky a update podle ní. |
||
Scrash66 Profil * |
#3 · Zasláno: 29. 11. 2012, 10:13:27
Zkusil jsem použít tu druhou možnost, s využitím klauzule ON DUPLICATE KEY UPDATE, jelikož vím, že data v DB už existuji. Přizpůsobil jsem si to k obrazu svému, chybu mi to nehlásí, ale data se neupdatují. Možná jen nechápu ten dotaz, tak ho tu uvedu:
$result = mysql_query(" INSERT INTO blocks (property) VALUES " . implode(", ", $array) . " ON DUPLICATE KEY UPDATE posX = VALUES(posX) AND posY = VALUES(posY) "); |
||
rampa76 Profil |
#4 · Zasláno: 29. 11. 2012, 10:16:48
Co použít něco takového:
update Table set Property = case when (PosX = 1 and PosY = 2) then 3 case when (PosX = 5 and PosY = 6) then 8 else 99 end |
||
Kajman Profil |
#5 · Zasláno: 29. 11. 2012, 10:29:20
Scrash66:
V závorce s vyjmenovanými slopuci (za blocks) by měly být i sloupce, které používáte díky funkci VALUES. Zkuste sem vypsat i sestavení toho pole a výsledný dotaz, takto se těžko radí. |
||
Scrash66 Profil * |
#6 · Zasláno: 29. 11. 2012, 14:13:32
Děkuji za rady.
Použil jsem řešení od Kajmana - funguje to velice rychle. Problém byl v tom, že jsem nevyjmenoval všechny ty sloupce, které používám. |
||
Časová prodleva: 2 měsíce
|
|||
Jcas Profil * |
#7 · Zasláno: 8. 2. 2013, 17:20:49
[#2] Kajman
„ht>tp://php.vrana.cz/hromadna-aktualizace-zaznamu.php“ Toto je asi přesně co také potřebuji, ale nerozumím tomu. Jak by to prosím Vás vypadalo na $_POST Form: 1 řádek - 1 input name="id", které je rovno "id" v DB Ještě mě tam mate, že $_POST má jiné prvky pole, krom name="ID" MYSQL dotaz: update `tabulka` set `sloupec`=$_POST['id'] where `id`=$_POST['id'] a udělej to pro každej řádek tabulky, pokud `sloupec`!=$_POST['id']. |
||
Časová prodleva: 11 let
|
0