Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP Oblicz liczbę downline w drzewie binarnym

To jest odpowiedź po wypróbowaniu wielu sposobów. Rozwiązanie mojego poprzedniego problemu. Wystarczy użyć tabeli z jednym członkiem powyżej.

Aby pokazać liczbę downline, lewą i prawą. Wstawiam ten skrypt na stronie drzewa elementów HTML dla każdego użytkownika w drzewie A, aż do B/C, aż do D/E/F/G ):

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

Dodaj tę funkcję w klasie użytkownika;

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

i działa pokazując binarną strukturę drzewa członków. Pokazywanie memberID nie jest tutaj dołączone, ponieważ jest to proste. Tylko lewy i prawy numer downlines.

Mam nadzieję, że ten post pomoże innym, którzy tego potrzebują. Masz jakieś sugestie dotyczące lepszych sposobów?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie znaków specjalnych z bazy danych MySQL za pomocą PHP

  2. Jak dodać dwa wyniki count(*) razem na dwóch różnych tabelach?

  3. Nielegalna mieszanka zestawień dla operacji „concat”

  4. MySQL pobiera ilości z ostatnich 12 miesięcy pogrupowane według miesięcy

  5. Policz częstotliwość każdego słowa