Pagina 1 din 1

Generare uniq id

Scris: Dum Apr 05, 2020
de ionatan
Salut, am acesta functie cu care vreau sa generez un id unic . Intrebarea mea este : ar trebuii sa fac o verificare in baza de date daca mai exista acel id inainainte de a insera id-ul? Adica e posibil la un momendat sa se genereze un id identic?
Cum ar fi cel mai bine sa fac o verificare?
Multumesc

Cod: Selectaţi tot

function generateRandomString($length = 20) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

Generare uniq id

Scris: Dum Apr 05, 2020
de MarPlo
Salut,
Ca masura de siguranta este indicat sa verifici in baza de date daca acel id mai exista in tabelul respectiv.
Daca vrei sa nu fie necesara o verificare si totusi sa fii sigur ca e unic, poti sa faci id-ul bazat pe timestamp, care are 10 caractere.
De exemplu, generezi 10 caractere aleatoare si la urma adaugi timestamp-ul:

Cod: Selectaţi tot

function generateRandomString($length = 10) {
  $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $charactersLength = strlen($characters);
  $randomString = '';
  for ($i = 0; $i < $length; $i++) {
    $randomString .= $characters[rand(0, $charactersLength - 1)];
  }
  return $randomString.time();
}

Generare uniq id

Scris: Mie Apr 08, 2020
de ionatan
Dacă rămân la varianta cu verificare.... fac un simplu select sa văd dacă mai exista acel id unic? Și dacă mai exista pot genera altul ? Care la rândul lui mai fac o verificare?☺

Generare uniq id

Scris: Mie Apr 08, 2020
de MarPlo
La varianta cu verificare ar trebui o functie de generare id care sa se autoapeleze daca id-ul exista deja.
Cam asa ca logica:

Cod: Selectaţi tot

function generateRandomString($length = 20){
  $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $charactersLength = strlen($characters);
  $randomString = '';
  for ($i = 0; $i < $length; $i++) {
    $randomString .= $characters[rand(0, $charactersLength - 1)];
  }

  //Aici faci selectul in baza de date

  // Daca id-ul exista returnezi iar functia, daca nu exista returnezi sirul generat
  if(Exista_Id_in_baza_de_date) return generateRandomString();
  else return $randomString;
}

Re: Generare uniq id

Scris: Mar Apr 14, 2020
de ionatan
As mai avea o întrebare, nu știu dacă e ok aici s-au ar trebuii adăugată în alt subiect.....
Ce se întâmplă sau ar fi vreo limita intru tabel în mysql ? De ex dacă la un moment dat vor fi zeci de mii sau sute de mii de rânduri intru-un tabel? Va fi mai lenta procesarea scriptului care va extrage anumite informații ?

Generare uniq id

Scris: Mar Apr 14, 2020
de MarPlo
Depinde si cat de multe coloane sunt in tabel.
Cu cat tabelul e mai mare cu atat dureaza mai mult selectarea datelor.
Deci, creste timpul de executie a scriptului.
Oricum, sunt mai multi factori care conteaza: structura tabelului, complexitatea instructiunii sql, viteza de executie a serverului.
Dar baza de date mysql se comporta lejer si la un milion de randuri, cu un smplu Select.