|
Poslao: 24 Maj 2014 15:11
|
offline
- danield 2

- Novi MyCity građanin
- 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.
|
|
|
Poslao: 25 Maj 2014 00:12
|
offline
- Rastafarii

- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- 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?
|
|
|
|
|
|
|
Poslao: 25 Maj 2014 10:55
|
offline
- danield 2

- Novi MyCity građanin
- Pridružio: 24 Maj 2014
- Poruke: 2
|
Isto tako sam i ja napisao u kodu, ali se i dalje dešavaju dupli unosi...
|
|
|
|
|
|
|
Poslao: 25 Maj 2014 19:49
|
offline
- Srki_82

- Moderator foruma
- 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.
|
|
|
|
|
|
|
Poslao: 26 Maj 2014 00:14
|
offline
- Rastafarii

- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- 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).
|
|
|
|
|
|