sql >> Databáze >  >> RDS >> Mysql

PHP Calculate Number of downline v binárním stromu

Toto je odpověď poté, co jsem vyzkoušel mnoho způsobů. Řešení mého předchozího problému. Stačí použít výše uvedenou tabulku jednoho člena.

Pro zobrazení počtu spodních linií, vlevo a vpravo. Tento skript vkládám na stránku stromu členů HTML pro každého uživatele ve stromu A, dolů do B/C, dolů do D/E/F/G ):

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

Přidejte tuto funkci do třídy uživatele;

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

a funguje se zobrazením stromové struktury binárních členů. Zobrazení memberID zde není připojeno, protože je to jednoduché. Jen levé a pravé číslo spodní linie.

Doufám, že tento příspěvek pomůže ostatním, kteří to potřebují. Nějaký návrh na lepší způsoby?




  1. mysql_real_escape_string() zcela odstraní řetězec

  2. Výkon MySQL – 5 parametrů z konfiguračního souboru

  3. ID zdroje #4 PHP MYSQL

  4. Získejte DÉLKU DLOUHÉHO RAW