PHP - MYSQL (insert or update) dva polja

Bok, muku mučim sa jednim upitom, ono što želim postići je:

Ako postoji redak sa da se poklapa da su DVA ista polja event_id i language tada UPDATE ako ne onda bi htio da se napravi novi unos INSERT.

event_id je označen kao UNIQUE ali, za jedan event moguće da bude više jezika, tada je event id isti a language polje se mijenja.

        $insert_description = $mysqli->query("
        INSERT INTO `evolve_descriptions` (`id`, `event_id`, `description`, `language`) 
        VALUES (NULL, '$event_id', '$description', '$lang')
        ON DUPLICATE KEY UPDATE 
        `event_id`='$event_id', 
        `description`='$description',
        `language`='$lang'

        ");

Ako ima tko znanja i voljan pomoći bio bih zahvalan.

Nisam nasao odgovor tamo, meni treba provjera po dva kljuca. Ili nesto drugacije.

Nisam siguran da sam te najbolje razumio ovaj dio:[quote=“Boris_, post:1, topic:35911”]
Ako postoji redak sa da se poklapa da su DVA ista polja event_id i language tada…
[/quote]
i onda ovo

Kako event id može ostati isti a jezik se mjenjati, ako je UNIQUE event id??

Da li ti imaš jedinstvene parove u tablici “event id & language” ?
Ako imaš jedinstvene parove, onda moraš označiti taj par kao UNIQUE, pa će ti raditi MYSQL dio koji kaže “…ON DUPLICATE KEY UPDATE …”

Ako ti nisu parovi “event id & language” jedinstveni … a ti imaš iznimku kada baš želiš insertati novi par ili updejtati postojeći …onda možeš napraviti to na način:

  1. UPDATE …što trebaš
  2. POGLEDAŠ koliko se linija affektalo : $affected_rows=mysql_affected_rows();
  3. Ako nemaš affektanih kolona, napraviš insert

Zamislio sam to ovako… posebna tablica je za evente a posebna za opise evenata.

Opisi evenata mogu biti hrvatski ili engleski ili njemacki.

Kada admistrator doda opis eventa moze birati da unese opis na eng i na njem.

E tada zelim da se u tu moju tablicu description doda novi red ako vec ne postoji koji bi sadrzavao podatak za koji id eventa se koristi i koji je jezik i taj opis eventa.

Ostatak skripte sam napisao i tako sam projektirao bazu sada radim admin dio i imam tih malih problema. Mozda postoji i bolji nacin.

Mogu zadati bilo koje polje da bude unique.
Nisam to bas radio taj dio cesto.

Pa onda samo u tablici “event_opisi”, označiš polja eventID,language kao UNIQUE.

Nešto ovako: $query="CREATE UNIQUE INDEX custom_index_name ON event_opisi(eventID,language)";

Nakon što su ti oba polja označena da su zajedno UNIQUE , onda bi prvotni pristup "ON DUPLICATE KEY UPDATE " …trebao raditi.

hmmm

dali ovako moj upit treba izgledati jer i dalje mi samo updatea red ne dodaje novi ukoliko promijenim vrijednost language.

$unique = $mysqli->query("CREATE UNIQUE INDEX custom_index_name ON evolve_descriptions(event_id,language)");
    
    $insert_description = $mysqli->query("
        INSERT INTO `evolve_descriptions` (`id`, `event_id`, `description`, `language`) 
        VALUES (NULL, '$event_id', '$description', '$lang')
        ON DUPLICATE KEY UPDATE 
        `event_id`='$event_id', 
        `description`='$description',
        `language`='$lang'

        ");

dakle nije dodao novi redak nego je samo update istog retka.

hvala na pomoći riješio sam!!


Copyright © 2022 WM Forum - AboutContact