Autor | Zpráva | ||
---|---|---|---|
Darth-cz- Profil * |
#1 · Zasláno: 21. 10. 2010, 18:58:49
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 |
#2 · Zasláno: 21. 10. 2010, 19:00:32
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 |
#3 · Zasláno: 21. 10. 2010, 19:03:27
Jen INSERT a kontrolovat chybový kód duplicity
|
||
Darth-cz- Profil * |
#4 · Zasláno: 22. 10. 2010, 14:11:25
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 |
#5 · Zasláno: 22. 10. 2010, 14:54:54 · Upravil/a: TomášK
Možná pomůže INSERT .. ON DUPLICATE KEY UPDATE
|
||
Darth-cz- Profil * |
#6 · Zasláno: 22. 10. 2010, 15:12:24
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 |
#7 · Zasláno: 22. 10. 2010, 15:20:20
Darth-cz-: takže sa pýtaš či je lepšie spraviť (select ? insert+select) alebo (insert+select)?
|
||
Keeehi Profil |
#8 · Zasláno: 22. 10. 2010, 15:27:51 · Upravil/a: Keeehi
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 * |
#9 · Zasláno: 22. 10. 2010, 15:32:14
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 |
#10 · Zasláno: 22. 10. 2010, 15:47:35
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 * |
#11 · Zasláno: 22. 10. 2010, 23:10:39
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. |
||
Časová prodleva: 14 let
|
0