Ultimul proiect mi-a cam dat batai de cap si m-am cam innecat ca tiganul la mal, in sensul ca nu-mi dau seama cum sa structurez baza de date astfel incat utilizatorii sa fie "pozitionati" ierarhic pe 5 nivele de sponsorizare.
Sitemul functioneaza in felul urmator:
1. Utilizatorul B isi creeaza cont pe baza unui link unic primit de la utilizatorul care a trimis invitatia ( utilizatorul A );
Starea initiala a contului este: inactiv
Dupa efectuarea platii contul este activat automat si utilizatorul ocupa o pozitie pe nivelul 1 in "piramida"
*daca utilizatorul A inscrie pe baza link-ului sau un alt utilizator, acesta va ocupa tot o pozitie pe nivelul 1
2. Utilizatorul B (nivel 1) trimite link-ul pe baza caruia se inscrie utilizatorul C care va fi pozitionat pe nivelul 2;
3. Utilizatorul C (nivel 2) trimite link-ul pe baza caruia se inscrie utilizatorul D care va fi pozitionat pe nivelul 3;[LIST][*]Acest utilizator, din abonamentul lui va plati mai sus (userii C, B, A)
4. Presupunem ca utilizatorul D trimite link-ul iar utilizatorii D1 si D2 isi vor face cont.
Acum trebuie sa interpretam corect sistemul:
- Utilizatorul D ocupa o pozitie pe nivelul 3 fata de A
- Utilizatorul D ocupa o pozitie pe nivel 0 (la fel ca userul A) fata de D1 si D2
- Utilizatorii D1 si D2 vor ocupa pozitii pe nivel 4 fata de A
Sper ca ati inteles ideea. Fiecare utilizator isi "construieste" cate o piramida pe 5 nivele.
Eu am gandit tabelele cam asa:
- Users ce contine coloanele id , usrid, username
- Levels ce contine coloanele id , uid , refid , L0 , L1 , L2 , L3 , L4 , L5 unde usrid din Users va fi comparat cu uid pentru a prelua datele utilizatorului respectiv.
Luam asa:
Users
- id = 12 , usrid = 1 , username = Gigel
- id = 13 , usrid = 2 , username = Sorin
- id = 14 , usrid = 3 , username = Liviu
- id = 15 , usrid = 4 , username = Cosmin
- id = 16 , usrid = 5 , username = George
- id = 17 , usrid = 6 , username = Cristi
- id = 18 , usrid = 7 , username = Vasile
Levels
* uid: folosit pt identificarea userului
* refid: folosit pt identificarea referrer-ului
- id = 21 , uid = 1 , refid = 0 , L0 = 1 , L1 = 0 , L2 = 0 , L3 = 0 , L4 = 0 , L5 = 0
Luam cazul in care Gigel ii trimite link-ul lui Sorin:
* verific nivelul lui Gigel. Gigel este pe nivel 0, adaug +1 la L1 si refid = usrid-ul referrer-ului. introduc in Levels
Levels
- id = 22 , uid = 2 , refid = 1 , L0 = 0 , L1 = 1 , L2 = 0 , L3 = 0 , L4 = 0 , L5 = 0
Luam cazul in care Sorin ii trimite link-ul lui Liviu:
* verific nivelul lui Sorin. Sorin este pe nivel 1, adaug +1 la L1 si refid = usrid-ul referrer-ului. introduc in Levels
Levels
- id = 23 , uid = 3 , refid = 2 , L0 = 0 , L1 = 0 , L2 = 1 , L3 = 0 , L4 = 0 , L5 = 0
.
.
. tot asa pana la nivelul 5 (fata de Gigel) pentru ca, practic fiecare user isi construieste propria-si piramida. Sistemul poate fi compus din mii de mici piramide.
Levels pana la nivelul 5 va arata asa:
- id = 21 , uid = 1 , refid = 0 , L0 = 1 , L1 = 0 , L2 = 0 , L3 = 0 , L4 = 0 , L5 = 0
- id = 22 , uid = 2 , refid = 1 , L0 = 0 , L1 = 1 , L2 = 0 , L3 = 0 , L4 = 0 , L5 = 0
- id = 23 , uid = 3 , refid = 2 , L0 = 0 , L1 = 0 , L2 = 1 , L3 = 0 , L4 = 0 , L5 = 0
- id = 24 , uid = 4 , refid = 3 , L0 = 0 , L1 = 0 , L2 = 0 , L3 = 1 , L4 = 0 , L5 = 0
- id = 25 , uid = 5 , refid = 4 , L0 = 0 , L1 = 0 , L2 = 0 , L3 = 0 , L4 = 1 , L5 = 0
- id = 26 , uid = 6 , refid = 5 , L0 = 0 , L1 = 0 , L2 = 0 , L3 = 0 , L4 = 0 , L5 = 1
Acum sa luam cazul in care Cristi(nivel 5) ii trimite link-ul lui Vasile:
* verific nivelul lui Cristi. Cristi este pe nivel 5, deci isi construieste propria-si piramida. Adaug +1 la L1 si refid = usrid-ul referrer-ului.. introduc in Levels
Levels
- id = 27 , uid = 7 , refid = 6 , L0 = 0 , L1 = 1 , L2 = 1 , L3 = 0 , L4 = 0 , L5 = 0
In concluzie, Gigel care este primul user din prima "piramida" poate incasa de la userii pozitionati pe maxim 5 nivele indiferent daca in acestea se incadreaza 4000 useri.
Al 2-lea user, Sorin , poate incasa la randul lui tot de pe 5 nivele
Acum vin intrebarile:
Ce vi se pare in neregula ?
Cum a-ti optimiza tabelul ?
L-ati imparti in 5 tabele ?
Ar fi mai ok sa verific fiecare user pana la varful "piramidei" ca sa-i pot contoriza si grupa mai usor ?
Levels ar arata cam asa:
- id = 21 , uid = 1 , refid = 0 , L0 = 1 , L1 = 0 , L2 = 0 , L3 = 0 , L4 = 0 , L5 = 0
- id = 22 , uid = 2 , refid = 1 , L0 = 0 , L1 = 1 , L2 = 0 , L3 = 0 , L4 = 0 , L5 = 0
- id = 23 , uid = 3 , refid = 2 , L0 = 0 , L1 = 0 , L2 = 1 , L3 = 0 , L4 = 0 , L5 = 0
- id = 24 , uid = 4 , refid = 3 , L0 = 0 , L1 = 0 , L2 = 0 , L3 = 1 , L4 = 0 , L5 = 0
- id = 25 , uid = 5 , refid = 4 , L0 = 0 , L1 = 0 , L2 = 0 , L3 = 0 , L4 = 1 , L5 = 0
Cazul in care George trimite link-ul lui Cristi
* verific nivelul lui George ... nivel 4. introduc in L5(marchez pozitia lui Cristi)
* verific referrer-ul lui George ... 4 (Cosmin). ii introduc usrid-ul in L4 ;
* verific referrer-ul lui Cosmin ... 3 (Liviu). ii introduc usrid-ul in L3 ;
* verific referrer-ul lui Liviu ... 2 (Sorin). ii introduc usrid-ul in L2 ;
* verific referrer-ul lui Sorin ... 1 (Gigel). ii introduc usrid-ul in L1 ;
- id = 26 , uid = 6 , refid = 5 , L0 = 0 , L1 = 1 , L2 = 2 , L3 = 3 , L4 = 4 , L5 = 1
Sper sa ma puteti ajuta cu o idee, un sfat, orice. Am prea multe variante in minte si deja le-am facut varza. Ma l.ovesc de fiecare data de cate ceva si iar refac tabelele.
Dau o bere pe paypal
Cheers
