Generare uniq id
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
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;
}
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?☺
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 ?
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.