Autor Zpráva
maks
Profil
Ahoj,
potřeboval bych dát do jednoho dotazu delete záznamu a současně update jiného.

Mým cílem je smazat záznam, kde je id=10 a zároveň u nejnižšího id, které je v databázi (nemusí to být nutně 1) změnit hodnotu v jiném sloupci. Mám to zapsané takhle, ale zápis (se sloupcem name pouze ilustrativní) je chybný:
$sql = "DELETE FROM table WHERE id = 10; UPDATE table SET name = 'jmeno' WHERE id = (SELECT MIN(id))";
mysql_query($sql);

chyba: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; UPDATE table SET name = 'jmeno' WHERE id = (SELECT MIN(id))'

jako spojovník jsem zkoušel volit 'středník', 'čárku' i 'and', ale nic nezabralo.

Děkuji za pomoc, je to spíše začátečnický dotaz. :-)
Alphard
Profil
Nelze, mysql_query() z bezpečnostních důvodů nedovolí spojit další příkaz přes ; ani nic jiného.
Umí to mysqli::multi_query.
maks
Profil
Alphard
vypadá to, že by to mohlo pomoci, nicméně je tam ještě pravděpodobně chyba v té druhé podmínce - žádná změna se neprovádí.

Jedná se tedy o tenhle kosíček:
"... WHERE id = (SELECT MIN(id))";
Jak zapsat podmínku "kde je nejnižší id"?
TomášK
Profil
SELECT MIN(id) FROM table
maks
Profil
TomášK
SELECT MIN(id) FROM table
to jsem taky zkoušel..

Když jsem zkusil pouze tu druhou část dotazu, samotná stále nefunguje tak, jak má..
mysql_query ("UPDATE table SET name = 'jmeno' WHERE id = (SELECT MIN(id) from table)");
chyba: 1093 - You can't specify target table 'table' for update in FROM clause

Ještě doplním, že chyba musí být v tom konci, s konkrténím číslem to totiž funguje.
Samotný dotaz "SELECT MIN(id) FROM table" mi rovněž vyhodí správný výsledek, nejnžší ID z databáze, ale s tím updatem dohromady nic.

Děkuji
Mastodont
Profil
Buď přes pomocnou tabulku nebo napsat storku.
Kajman_
Profil *
Pokud je id jedinečné, tak stačí
UPDATE table SET name = 'jmeno' order by id limit 1

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0