sql >> データベース >  >> RDS >> Mysql

PHPはバイナリツリーのダウンラインの数を計算します

    これは私が多くの方法を試した後の答えです。私の以前の問題を解決します。上記の単一のメンバーテーブルを使用するだけです。

    ダウンラインの数を表示するには、左右。このスクリプトを、ツリーA、B / C、D / E / F / GまでのすべてのユーザーのHTMLメンバーツリーページに挿入します):

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

    この関数をユーザークラスに追加します;

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

    バイナリメンバーツリー構造を示して動作します。 memberIDの表示はここに添付されていないため、簡単な方法です。ちょうど左と右のダウンライン番号。

    この投稿がそれを必要とする他の人に役立つことを願っています。より良い方法について何か提案はありますか?




    1. ストアドプロシージャの作成中にMySQL構文エラーが発生しました

    2. WindowsでのperlDBI-mysqlのインストールに関する問題

    3. 結合されたテーブルで個別の値を選択する

    4. 親と無限の子を返すステートメントを選択します