如何计算总下线,给我任何想法(传销项目)


How to count Total Downline , Give me any Idea (MLM project)

任何人给我任何关于我如何可以计数下线传销项目(PHP/MySQL)的想法。目前我正在使用下面的方法。但是当我的数据库记录变为300或更多时,它显示:最大执行时间在第51行超过了30秒。(我认为这发生在无限循环中)。请帮帮我。正确的方式应该是什么?

我的当前代码:

<?php
require_once('configuration.php');
/// main function which will return Total Node Count
function nodecount($id) {
   $query = "SELECT * FROM ".memberlogtbl." WHERE locationid='".$id."' and topup >'0'";
   $result = mysql_query($query);
   $count = mysql_num_rows($result);
   $_SESSION['hackx8'] = $_SESSION['hackx8'] + $count;
   while($row = mysql_fetch_array($result, MYSQL_BOTH)) {
      nodecount($row["id"]);
   }
   mysql_free_result($result);
   return "";
}
$q_l = mysql_query("SELECT `left`,id FROM ".memberlogtbl." WHERE `left` >'0' ORDER BY id ASC");
while($updt_tbl_l = mysql_fetch_row($q_l)) {
   unset($_SESSION['hackx8']);
   $total_l = nodecount($updt_tbl_l['0']).$_SESSION['hackx8'] + 1;
   mysql_query("UPDATE ".memberlogtbl." SET totalleft='$total_l' WHERE id='".$updt_tbl_l['1']."'");
}
/// Update database with letest Total right Count
$q_r = mysql_query("SELECT `right`,id FROM ".memberlogtbl." WHERE `right` >'0' ORDER BY id ASC");
while($updt_tbl_r = mysql_fetch_row($q_r)) {
   unset($_SESSION['hackx8']);
   $total_r = nodecount($updt_tbl_r['0']).$_SESSION['hackx8'] + 1;
   mysql_query("UPDATE ".memberlogtbl." SET totalright='$total_r' WHERE id='".$updt_tbl_r['1']."'");
}
?>

在DB中设置2列作为每个用户的左计数和右计数。然后使用参考id,你可以得到每条右腿和每条左腿的计数。希望这有效!!

我做过一个类似的项目。我所做的是(在做了大量的研究/搜索之后)为二叉树中的每个节点使用一个左值和一个右值。我不记得在哪里读到过这种方法,但它很有效。例如,如果有6个节点,顶部/根节点将获得1 &12因为它是LEFT &分别为RIGHT值。然后你可以得到它的总下线(右-左- 1)/2,我想。我希望这能对你的项目有所帮助。:)

在你的查询中使用MySQL limits

Limit用于将您的MySQL查询结果limit到属于specified range的那些。您可以使用它来显示第一个X number of results,或显示从X到Y的结果范围。它被描述为限制X, Y,并包含在查询的末尾。X为起始点(remember the first record is 0), Y为持续时间(how many records to display)

例子:

SELECT * FROM your_table LIMIT 0,10——//这将显示数据库中的前10个结果。SELECT * FROM your_table LIMIT 5,5——//这将显示记录6,7,8,9和10

这是一个复杂的问题,需要了解数据库结构和测试数据来帮助调试。我已经做了同样的事情,但代码可以很大程度上取决于你如何构建东西。

public function getCountChilds()
	{
	    $count = 0;
	      $this->db->where('user_id',$this->session->userdata('user_id'));
	     $sponcer_code= $this->db->get('registration')->row();
	    	$this->db->from('registration');
	        $this->db->where('referel', $sponcer_code->sponcer_id);
	       $query =  $this->db->get();
	       //echo count($query);
	      $count2=count($query->result());
	       //die();
	       $count=0;
	       
	        foreach($query->result() AS $objChild)
	        {
				$this->db->from('registration');
				$this->db->where('referel', $objChild->sponcer_id);
				$query2 =  $this->db->get();
				$count=$count+count($query2->result()); 
	        }
	       return $count+$count2;
	}

我写了这段代码,它返回了我想要的传销软件的有效数据。

function getDlink($parent, $level){
        $users = $this->db->query('SELECT * FROM `member` WHERE parent_id="parent_id"')->result_array();
        static $arr = array();
        if ($users != null){
            foreach ($users as $user){
                $this->db->where('id', $user['id']);
                $u_data = $this->db->get('test')->row_array();
                array_push($arr, $user['id']);
                $parent_child = $user['id'];
                $this->getDlink($parent_child, 0);
            }
        }
        return $arr;
    }

这将返回一个数组,然后计算数组中一个元素的总计数

相关文章: