sql >> Database teknologi >  >> RDS >> Mysql

PHP Beregn antallet af downline i binært træ

Dette er svaret, efter at jeg har prøvet mange måder. Løser mit tidligere problem. Bare ved at bruge en enkelt medlemstabel ovenfor.

For at vise antallet af downlines, venstre og højre. Jeg indsætter dette script på HTML-medlemstræsiden for hver bruger i træet A, ned til B/C, ned til D/E/F/G ):

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

Tilføj denne funktion i User Class;

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());
        }   
    }   

og det virker ved at vise binær medlemstræstruktur. Visning af medlems-ID er ikke vedhæftet her, forårsaget af det på en enkel måde. Lige venstre og højre downlines nummer.

Håber dette indlæg vil hjælpe andre, der har brug for det. Nogen forslag til bedre måder?




  1. Hvordan kan jeg slette en ikke-nul-begrænsning i Oracle, når jeg ikke kender navnet på begrænsningen?

  2. Kalder lagret procedure med returværdi

  3. Hvordan biner man vilkårligt i MySQL?

  4. Forskellen mellem nøgle, primær nøgle, unik nøgle og indeks i MySQL