Autor Zpráva
Scrash66
Profil *
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
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 *
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
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
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 *
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.
Jcas
Profil *
[#2] Kajman
http://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'].

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: