Pogledajte određenu poruku
Staro 19. 02. 2009.   #1
srdjan
xyz
Grand Master
 
Datum učlanjenja: 25.10.2006
Poruke: 893
Hvala: 87
346 "Hvala" u 163 poruka
srdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu auru
Default Generisanje jedinstvenog slucajnog broja, koji vec ne postoji u bazi

Svaki korisnik ima svoj jedinstven 6-cifren slucajan broj (token) generisan prilikom registracije. Broj se generise na ovaj nacin:

Kôd:
SELECT
  random.value 
FROM
  (SELECT 100000 + TRUNCATE(RAND(UNIX_TIMESTAMP()) * 900000, 0) AS value) random
WHERE
  random.value NOT IN (SELECT token FROM user)
Ako ovo vrati NULL, to znaci da je RAND() vratio broj koji vec postoji u koloni user.token. U petlji, gornji SELECT izvrsava dok se ne dobije broj. Taj broj se insertuje zajedno sa ostalim podacima.

E sad, ovo radi "dovoljno dobro" , medjutim postoje 2 problema:

1. radice sve sporije kako bude korisnika
2. moguce je da se dogode 2 identicna tokena - mogu to da resim tako sto bi bio UNIQUE INDEX na polju, a u slucaju INSERT greske ponovi se ceo proces generisanja.

PITANJE: da li neko zna za inteligentnije resenje za ovaj problem, idealno bi bilo da nema petlje tako da se izbor jedinstvenog slucajnog broja moze staviti u INSERT.
srdjan je offline   Odgovorite uz citat