Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP Berechnen Sie die Anzahl der Downlines im Binärbaum

Dies ist die Antwort, nachdem ich viele Möglichkeiten ausprobiert habe. Lösung meines vorherigen Problems. Verwenden Sie einfach eine einzelne Mitgliedstabelle oben.

Um die Anzahl der Downlines links und rechts anzuzeigen. Ich füge dieses Skript in die HTML-Mitgliederbaumseite für jeden Benutzer im Baum A, bis B/C, bis D/E/F/G ein:

<?php echo $users->downline_number($member,'_left'); ?>
<?php echo $users->downline_number($member,'_right'); ?>

Fügen Sie diese Funktion in der Benutzerklasse;

hinzu
function downline_number($member,$position) {

$query  = $this->db->prepare("SELECT * FROM `member` WHERE `upline`='$member' AND `position`='$position'");
        $query->bindValue(1, $member);
        $query->bindValue(2, $position);

try{
        $query->execute();
        $rows = $query->fetch();

        if($this->count_downline($member,$position) >0 ){
        $total=$this->total_members_down($rows['username']);
        }else{
        $total=0;
        }

        return $total;      

        }catch(PDOException $e){
            die($e->getMessage());
        }   

    }   

function count_downline($member,$position) {

$query  = $this->db->prepare("SELECT * FROM `member` WHERE `upline`=? AND `position`=? ");
        $query->bindValue(1, $member);
        $query->bindValue(2, $position);
    try{
        $query->execute();
        return $rows = $query->rowCount();

        }catch(PDOException $e){
            die($e->getMessage());
        }   
    }   

function total_members_down($upline,$reset=0) {
global $num;
if ($reset==0) { $num=1; }

$query  = $this->db->prepare("SELECT * FROM `member` where `upline`='$upline' order by id asc");
        $query->bindValue(1, $upline);
try{

$query->execute();

if ($upline !='') {

            if ($this->total_down($upline) > 0 ) {
                    while ($rows = $query->fetch() ) {
                    $num++;
                    $this->total_members_down($rows['username'],$num);
                    } 
                    return $num;
            } else { 
            return $num;
            }
} else { $num=0; return $num;  }            

     }catch(PDOException $e){
            die($e->getMessage());
        }   
}   

function total_down($upline) {

$query  = $this->db->prepare("SELECT * FROM `member` where `upline`='$upline' order by id asc ");
        $query->bindValue(1, $upline);

    try{
        $query->execute();
        return $rows = $query->rowCount();

        }catch(PDOException $e){
            die($e->getMessage());
        }   
    }   

und es funktioniert und zeigt die Baumstruktur der binären Mitglieder. Das Anzeigen der Mitglieds-ID ist hier nicht angebracht, verursacht es auf einfache Weise. Nur linke und rechte Downline-Nummer.

Ich hoffe, dieser Beitrag wird anderen helfen, die ihn brauchen. Irgendwelche Vorschläge für bessere Wege?