Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP Hitung Jumlah downline di pohon biner

Ini adalah jawabannya setelah saya mencoba banyak cara. Memecahkan masalah saya sebelumnya. Hanya menggunakan tabel anggota tunggal di atas.

Untuk menunjukkan jumlah downline, kiri dan kanan. Saya menyisipkan skrip ini di halaman hierarki anggota HTML untuk setiap pengguna di pohon A, hingga B/C, hingga D/E/F/G ):

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

Tambahkan fungsi ini di Kelas Pengguna;

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

dan berfungsi menunjukkan struktur pohon anggota biner. Menampilkan memberID tidak terlampir di sini, karena caranya sederhana. Hanya nomor downline kiri &kanan.

Semoga postingan ini dapat membantu orang lain yang membutuhkan. Ada saran untuk cara yang lebih baik?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nama tabel ditentukan dua kali sebagai target untuk pembaruan dan sumber terpisah untuk data

  2. meningkatkan Pemicu kesalahan aplikasi di MySQL DBMS

  3. SQL:Temukan baris berikutnya dalam klausa where yang diberi ID

  4. PHP MySQL memasukkan kueri pembuatan array asosiatif multimensional dari kunci array

  5. Bagaimana cara membuat tabel mysql dengan stempel waktu kolom default current_date?