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

时间:2011-09-04 16:54:55

标签: php mysql

任何人都对我如何为MLM项目(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']."'");
}
?>

6 个答案:

答案 0 :(得分:2)

将数据库中的2列作为左计数和每个用户的右计数。然后用参考id你可以得到每个右腿和每个左腿的数量。希望这有效!!!

答案 1 :(得分:1)

只需使用MySQL Limts查询。

限制用于将limit MySQL查询结果用于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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这是一个复杂的问题,需要了解数据库结构和测试数据才能帮助调试。我完成了同样的事情,但代码可能非常依赖于你如何构建事物。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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