Structura bazei de date a unui site de tip MLM

Întrebări legate de conectarea la baze de date MySQL prin intermediul PHP

Moderatori: Zamolxe, Moderatori

Avatar utilizator
eAndy
PHPRomania Supporter
Mesaje: 14
Membru din: Mar Mar 16, 2010 5:21 pm
Localitate: Slatina
Contact:

Structura bazei de date a unui site de tip MLM

Mesajde eAndy » Vin Mar 25, 2011 2:38 pm

Salut.

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



Avatar utilizator
eAndy
PHPRomania Supporter
Mesaje: 14
Membru din: Mar Mar 16, 2010 5:21 pm
Localitate: Slatina
Contact:

Mesajde eAndy » Vin Mar 25, 2011 7:09 pm


badtiger
Senior Member
Mesaje: 598
Membru din: Vin Noi 03, 2006 7:54 pm
Contact:

Mesajde badtiger » Vin Mar 25, 2011 9:29 pm

N-am stat sa citesc tot ca-i roman, dar de ce nu ai creat un camp treapta (cu valori posibile: 1,2,3,4,5) si restul din cod....

are treapta <3 are voie nu.. n-are voie etc

catalin.ciobanu
Average Member
Mesaje: 107
Membru din: Vin Dec 25, 2009 1:11 am
Localitate: Iasi

Mesajde catalin.ciobanu » Vin Mar 25, 2011 11:00 pm

Poti incerca si o implementare cu arbori. parent/child si un field pt nivelul pe care se afla utilizatorul.

Avatar utilizator
eAndy
PHPRomania Supporter
Mesaje: 14
Membru din: Mar Mar 16, 2010 5:21 pm
Localitate: Slatina
Contact:

Mesajde eAndy » Sâm Mar 26, 2011 9:20 am


catalin.ciobanu
Average Member
Mesaje: 107
Membru din: Vin Dec 25, 2009 1:11 am
Localitate: Iasi

Mesajde catalin.ciobanu » Sâm Mar 26, 2011 4:13 pm


Avatar utilizator
eAndy
PHPRomania Supporter
Mesaje: 14
Membru din: Mar Mar 16, 2010 5:21 pm
Localitate: Slatina
Contact:

Mesajde eAndy » Lun Mar 28, 2011 3:09 pm

Tot nu am reusit. Ma poate ajuta cineva contracost ?

Avatar utilizator
EmanuelSerban
New Member
Mesaje: 4
Membru din: Mar Apr 26, 2011 2:22 pm

Mesajde EmanuelSerban » Mar Apr 26, 2011 6:12 pm

Salut,

Nu-ți pot da link direct pentru că abia sunt înscris pe acest forum, dar rezolvarea la problema ta o poți găsi căutând pe google "Managing Hierarchical Data in MySQL" și accesând primul rezultat.


Înapoi la “MySQL”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 5 vizitatori