Zählt den gesamten untergeordneten Knoten links und rechts nach Rängen gruppiert

8

Ich arbeite an einem Projekt, das Menschen auf Basis von Empfehlungen belohnt (MLM)

Ich konnte die Gesamtzahl der Kind-Knoten auf der linken und rechten Seite zählen, aber jetzt muss ich in der Lage sein, die Ränge der Benutzer zu aktualisieren, wenn sie eine bestimmte Anzahl von Benutzern mit bestimmten Rängen auf beiden Seiten haben . (Ich werde es im Folgenden besser erklären:

Benutzertabelle

%Vor%

Baumtabelle

%Vor%

Unten ist der von dieser Tabelle generierte Baum

Wie aktualisiere ich leftCount und rightCount, wenn sich ein Benutzer registriert

%Vor%

Verwendete Funktionen

%Vor%

All das funktioniert gut, aber dann muss ich etwas implementieren und ich habe nicht den besten Weg gefunden.

Ich muss den Rang für jeden Benutzer ändern, wenn sie eine Stufe erreicht haben. siehe unten und Beispiel:

%Vor%

Bis Stufe 2 habe ich kein Problem, aber nach oben kann ich die richtige Logik nicht finden

Aktualisieren zum Beispiel: Die Anzahl der Growbigs kann von überall auf den Beinen kommen, es sollten nicht nur direkte Knoten sein, sondern nur eine Anzahl von Rängen, die alle unterhalb dieses Benutzers auf jeder Seite liegen.

UPDATE: Erneutes Nachfragen mit klareren Begriffen und Spezifikationen

ist ein binärer Baum (2: 2), was bedeutet, dass eine Person nur zwei Personen direkt unter sich haben kann (eine auf der linken und eine auf der rechten Seite).

Mit dem Bild oben sieht mein Tisch so aus

Baumtabelle

%Vor%

Hinweis: Es ist für einen Benutzer nicht obligatorisch, jemanden unter sich auf irgendeiner Seite oder beidem zu haben. es bedeutet, wenn ein Benutzer niemanden unter sich hat, dann endet der Baum (Zweig) dort, wenn er eine Person direkt links und keine rechts hat, bedeutet dies, dass der linke Zweig weiter wachsen kann.

Die Logik, jede Benutzerbasis auf ihren Wachstum zu bewerten und wie sie es geschafft haben, das Wachstum auf jeder Seite auszugleichen, ist das Problem.

Die Logik

Rang 1: Supervisor: Der Benutzer muss 3 Benutzer auf der rechten Seite und 3 Benutzer auf der linken Seite haben.

Rang 2: Controller: Benutzer muss 7 Benutzer haben, die "Supervisors" auf der linken Seite sind und 7 Nutzer, die auch Supervisor auf der rechten Seite sind.

Rang 3: Senior Controller: Benutzer muss 7 Benutzer haben, die "Controller" auf der linken Seite sind und auch 7 "Controller" auf der rechten Seite haben.

Rang 4: Botschafter: Benutzer muss 7 Benutzer haben, die auf der linken Seite Senior Controller und auf der rechten Seite 7 Senior Controller sind.

Rang 5: Senior Ambassador: Benutzer muss 7 Benutzer haben, die links und rechts Botschafter sind.

Rang 6: Großer Botschafter: Der Benutzer muss 7 Benutzer haben, die auf beiden Seiten hohe Botschafter sind.

Erläuterung: lass mich auf Rang und erkläre es:

Rang: Ambassador - wenn der Benutzer mit der ID 3 auf der rechten Seite 45 Personen hat und 7 der Personen auf der rechten Seite sind Senior Controller und auch auf der linken Seite hat er 67 Personen und 7 sind bereits Senior Controller, dann Benutzer mit ID 3 sollte zu "Botschafter"

aufgerüstet werden

@blag

    
user2666633 21.09.2017, 15:07
quelle

1 Antwort

3

Dies ist wahrscheinlicher, wie ich dieses Problem ( Ссылка ) übernehmen würde:

Das neue Tabellenschema lautet:

%Vor%

Die Vollversion:

Hinweis: Ich verwende den folgenden Wert, um die Verwendung eines größeren Datasets zu vermeiden

%Vor%

SQL Fiddle

VERFAHREN

%Vor%

wachsen

%Vor%

growbig

%Vor%

Abfrage 1 :

%Vor%

Ergebnisse :

%Vor%

Abfrage 2 :

%Vor%

Ergebnisse :

%Vor%

Abfrage 3 :

%Vor%

Ergebnisse :

%Vor%     
Blag 21.09.2017, 21:25
quelle