Generare uniq id

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
ionatan
Mesaje: 94

Generare uniq id

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;
}
Cumpără adevărul, şi nu-l vinde, înţelepciunea, învăţătura şi priceperea.
https://www.crestinmultimedia.com/

MarPlo Mesaje: 4343
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();
}

ionatan Mesaje: 94
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?☺
Cumpără adevărul, şi nu-l vinde, înţelepciunea, învăţătura şi priceperea.
https://www.crestinmultimedia.com/

MarPlo Mesaje: 4343
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;
}

ionatan Mesaje: 94
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 ?
Cumpără adevărul, şi nu-l vinde, înţelepciunea, învăţătura şi priceperea.
https://www.crestinmultimedia.com/

MarPlo Mesaje: 4343
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.