Unos reda ukoliko ne postoji

Unos reda ukoliko ne postoji

offline
  • Pridružio: 24 Maj 2014
  • Poruke: 2

Poštovani,

Treba da objedinim dva upita, sa obzirom da mi se desavaju dupliranja klikova.

SELECT `user_subid` FROM `clicks` WHERE `user_subid`='".$user_subid."'

Ukoliko nema rezultata, da uradi ovo:
INSERT INTO `clicks` (`file_id`, `country`, `date`, `timeClick`, `user_subid`) VALUES ('".$fileid."', '".$country."', '".$date."', '".$timeClick."', '".$user_subid."')

Vidjao sam slicne kverije, ali su uvek na primerima dati neki specificni uslovi.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Rekao bih da ovo pokusavas da uradis u PHP-u. Jesam li u pravu?

Ako jesam - resenje je jednostavno:

$query = mysql_query("SELECT `user_subid` FROM `clicks` WHERE `user_subid`= '$user_subid'"); if (mysql_num_rows($query) == 0) {     mysql_query("INSERT INTO `clicks` (`file_id`, `country`, `date`, `timeClick`, `user_subid`) VALUES ($fileid, '$country', '$date', '$timeClick', '$user_subid'")); }

Ako nisam, u kom jeziku radis ovo?



offline
  • Pridružio: 24 Maj 2014
  • Poruke: 2

Isto tako sam i ja napisao u kodu, ali se i dalje dešavaju dupli unosi...

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Imaj na umu da to nije atomična operacija. Ako više niti ili procesa izvršava tu istu rutinu, može doći do dupliranih unosa. Jedno rešenje bi bilo da koristiš transakcije s table lock-om na željenim tabelama, druga mogućnost je da napraviš stored procedure koja će obaviti proveru da li unos postoji i upisati ga ako je to potrebno.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

A postoji i treca varijanta - UNIQUE indeks i INSERT IGNORE.

ALTER TABLE  `clicks` ADD UNIQUE (`file_id`, `user_subid`);

Tako sigurno nece doci do dupliranja unosa, jer MySQL nece dozvoliti unos novog rekorda ako se vrednosti u file_id i user_subid poklapaju sa nekim od postojecih rekorda (obe kolone u istom rekordu).

INSERT IGNORE INTO `clicks` (`file_id`, `country`, `date`, `timeClick`, `user_subid`) VALUES ($fileid, '$country', '$date', '$timeClick', '$user_subid')

Tako ce MySQL ignorisati (pokusaj) unosa ako rekord vec postoji, umesto da upise (bez UNIQUE indeksa) ili baci gresku (sa UNIQUE indeksom).

Ko je trenutno na forumu
 

Ukupno su 1114 korisnika na forumu :: 55 registrovanih, 7 sakrivenih i 1052 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Andrija357, atmel, Bobrock1, bojank, bokisha253, Buzdovan, cavatina, croato, Dimitrise93, doklevise, dragoljub11987, FOX, Gargantua, ivica976, jaeger, Karla, kikisp, Koridor, kunktator, Leonov, Lošmi, mercedesamg, Metanoja, MikeHammer, mikki jons, milenko crazy north, Milometer, mkukoleca, mrav pesadinac, MrNo, Nobunaga, NoOneEver Dreams, nuke92, Oscar, Panter, Parker, pein, procesor, raptorsi, repac, robert1979, Rogan33, royst33, ruger357, S2M, sasa76, savaskytec, slonic_tonic, Srki94, Srle993, tubular, vathra, VP6919, YugoSlav