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:
- UPDATE …što trebaš
- POGLEDAŠ koliko se linija affektalo :
$affected_rows=mysql_affected_rows();
- 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!!