Autor Zpráva
Darth-cz-
Profil *
Zdravím,

chtěl bych se vás zeptat, zda je lepší pro nahrání položky, u které nevím, zda již není zadána, použít Select a zjistit, zda položka existuje a poté Insert položky, nebo použít dotaz Insert ... Update a pokud položka již v databázi je, neudělat nic a pokud není, tak ji vložit takto.

Za odpověď děkuji
joe
Profil
Nejlepší by byl asi jen INSERT a kontrolovat chybový kód duplicity - 1062, pokud tam je nějaký unikátní sloupec.

Jinak se přikláním k tomu udělat to odděleně.
Mastodont
Profil
Jen INSERT a kontrolovat chybový kód duplicity
Darth-cz-
Profil *
Zapomněl jsem dodat, že pokud klíčové slovo existuje, potřebuji zjistit jeho id. Tudíž jen insert zřejmě nebude stačit :(
TomášK
Profil
Možná pomůže INSERT .. ON DUPLICATE KEY UPDATE
Darth-cz-
Profil *
TomášK:
jj to je Insert .. Update , A ptal jsem se, jestli je lepší použít nejdřív select a poté případně insert a nebo Insert .. Update :)
tiso
Profil
Darth-cz-: takže sa pýtaš či je lepšie spraviť (select ? insert+select) alebo (insert+select)?
Keeehi
Profil
Darth-cz-:
potřebuji zjistit jeho id
To id je id toho starého záznamu? Předpokládám že ano.

Jelikož potřebujete získat id, pokud nastane kolize, rozumný by byl select a na základě jeho výsledku buď insert nebo update.

$result=mysql_query("SELECT id FROM tabulka WHERE kolizní sloupce");
if(mysql_num_rows($result)==0) {
  mysql_query("INSERT …");
}
else {
  $puvodni_id=mysql_result($result,0);
  mysql_query("UPDATE …");
}
Darth-cz-
Profil *
Jak tak přemýšlím tak Insert On DUPLICATE KEY UPDATE by mi asi nevrátil id již existujícího záznamu a nebo by ho asi změnil, takže asi bude nejlepší řešení select a podle toho, zda záznam již existuje, buďto selectem vybrat id a nebo z insertu dostat last_insert_id.

Děkuji všem za pomoc :)
TomášK
Profil
Darth-cz-:
Bez transakcí to nemusí fungovat koretně - pokud druhý proces vloží záznam až poté, co první testuje jeho existenci, selže první proces při pokusu o vložení. Bylo by dobré to mít ošetřené, nebo rozmyšlené, že chyba, kterou to zpusobí, nestojí za to řešit.
Kajman_
Profil *
Jak tak přemýšlím tak Insert On DUPLICATE KEY UPDATE by mi asi nevrátil id již existujícího záznam

Podle mysql_affected_rows poznáte, že se udělal insert nebo update.

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: