Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP Изчислете броя на низходящата линия в двоичното дърво

Това е отговорът, след като опитах много начини. Решаване на предишния ми проблем. Просто използвам таблица с един член по-горе.

За показване на броя на долните линии, отляво и отдясно. Вмъквам този скрипт в страницата на дървото с членове на HTML за всеки потребител в дървото A, надолу до B/C, надолу до D/E/F/G ):

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

и работи, показвайки двоична структура на члена. Показването на идентификатора на члена не е прикачено тук, което е по прост начин. Просто левия и десния долни номера.

Надяваме се, че тази публикация ще помогне на други, които се нуждаят от нея. Някакво предложение за по-добри начини?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка, когато се опитам да свържа игра с mysql 5.5

  2. Има ли начин да се генерира диаграма на UML клас от съществуваща MySQL база данни?

  3. mysql подзаявка в LEFT JOIN

  4. Посоченият ключ за Laravel беше твърде дълъг при създаване на таблица с известия

  5. Кое съпоставяне да използвате, така че `ş` и `s` да се третират като уникални стойности?