Autor Zpráva
Fisak
Profil
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);
tabulka má řádky "id", "video_id", "user_id".
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
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
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
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
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
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
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
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 …

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: