| 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: 15 let
|
|||
0