Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 12. 2. 2014, 12:31:28
Dobrý den,
chtěl bych aby můj skript zapsal určitý řádek pouze jednou a pokud už je zapsaný tak ho již nezapsal. Používám na to "Insert ignore into.." ale i tak mi to zapíše stejný řádek vícekrát: $arr_history = array( 'video_id' => mypage("action"), 'user_id' => $_SESSION['user_id'], ); DB::query("INSERT IGNORE INTO [:pref:watch_history]", $arr_history); Nevidí někdo nějakou chybu kterou jsem přehlédl? Předem děkuji za odpovědi.. |
||
Tori Profil |
A je přes oba sloupce (nebo možná jen přes video_id) unikátní index?
|
||
juriad Profil |
#3 · Zasláno: 12. 2. 2014, 12:33:03
Vytvoř unikátní klíč nad dvojicí video_id, user_id. To slůvko IGNORE v INSERTu znamená: nedělej nic, pokud se INSERT nepovede.
|
||
Fisak Profil |
#4 · Zasláno: 12. 2. 2014, 12:44:23
jde o to že bych spíše potřeboval aby se to nezapsalo pokud ten stejný řádek už existuje.. ne pokud existuje stejný řádek s video_id nebo user_id
|
||
Joker Profil |
#5 · Zasláno: 12. 2. 2014, 12:50:24
Fisak:
„spíše potřeboval aby se to nezapsalo pokud ten stejný řádek už existuje.. ne pokud existuje stejný řádek s video_id nebo user_id“ A jak se pozná ten stejný řádek? |
||
Fisak Profil |
#6 · Zasláno: 12. 2. 2014, 12:59:06
No pokud mám třeba v tabulce:
id || video_id || user_id ------------------------------- 1 || v6x || 21 2 || 8f6 || 28 3 || v6x || 28 4 || ji8 || 17 to je tabulka v db (příkladná) 5 || v6x || 21 -> nezapíše se 6 || v6x || 17 -> zapíše se 7 || 8f6 || 28 -> nezapíše se 8 || ji8 || 28 -> zapíše se Doufám že je zde pochopitelný ten princip... |
||
Joker Profil |
#7 · Zasláno: 12. 2. 2014, 13:30:18
Fisak:
„Doufám že je zde pochopitelný ten princip“ Moc ne. [#4]: „bych spíše potřeboval aby se to nezapsalo pokud ten stejný řádek už existuje.. ne pokud existuje stejný řádek s video_id nebo user_id“ Ale příklad v [#6] ukazuje pravý opak: Nezapsaly by se řádky, kde už stejná kombinace video_id a user_id existuje, přestože řádek jako takový stejný není (id je jiné). Může tedy nastat situace, že řádek má video_id i user_id stejné s nějakým existujícím a přesto by se měl zapsat? Anebo naopak situace, kdy řádek žádný jiný řádek stejnou kombinaci video_id a user_id nemá, ale přesto by se řádek neměl zapsat? Jestli ano, podle čeho se stejný řádek pozná? |
||
Fisak Profil |
#8 · Zasláno: 12. 2. 2014, 13:36:36
Joker:
No můj příklad byl nejspíše špatně pochopen. Chtěl bych aby se zapsal pouze řádek kde ještě není stejná kombinace user_id a video_id. A pokud bude již existovat stejná kombinace user_id a video_id tak se pouze přepíše id na nejnovější ale user_id a video_id zůstane stejné na tom řádku... |
||
Joker Profil |
#9 · Zasláno: 12. 2. 2014, 13:44:54
Fisak:
Tak pak je odpověď viz juriad [#3], vytvořit nad těmi sloupci (resp. nad jejich kombinací) unikátní index. „A pokud bude již existovat stejná kombinace user_id a video_id tak se pouze přepíše id na nejnovější ale user_id a video_id zůstane stejné na tom řádku“ Jesli id je identifikátor, obecně není dobrý nápad ho měnit. Nicméně zařídilo by se to před INSERT … ON DUPLICATE KEY UPDATE … |
||
Časová prodleva: 11 let
|
0