任何人都对我如何为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']."'");
}
?>
答案 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 * FROMyour_table
LIMIT 5,5 - //这将显示记录6,7,8,9和10
答案 2 :(得分:1)
答案 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;
}
这将返回一个数组,然后计算数组的一个元素的总数