首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从大MLM数据中选择数据

从大MLM数据中选择数据
EN

Stack Overflow用户
提问于 2018-01-03 12:14:53
回答 1查看 150关注 0票数 0

我想我需要一些建议来解决我的案子。我有一个使用PHP和MySQL的MLM应用程序。问题在成员架构中。本案如下:

  1. 每个父母最多可以生10个孩子,每个孩子也可以最多生10个孩子。
  2. 在我的申请中,每个试图注册的人都需要一份推荐信,这意味着需要一个家长。
  3. 传销系统只支持10个级别,这意味着一个人可能有10.000.000.000下线。
  4. 这是主要案件。如果有一个有10个孩子的父母,并且有人试图向该父母推荐(这意味着父母将有11个孩子)注册,那么人们将成为10个孩子中的一个的大孩子。

说明:

A(父母)

A1,A2,A3,A4,A5,A6,A7,A8,A9,A10。(儿童)

然后,有人想注册成为A的子( A11 ),那么系统必须检测A是否有10个子(最大),A11将成为A1的子(如果A1还没有10个子)。但是如果A1已经有了10个孩子,那么A11就会成为A2的孩子,依此类推。

主要问题是,如果我从数据库中选择数据,如:

代码语言:javascript
复制
<?php
$sql = mysql_query("SELECT * FROM table WHERE refferal='A'");
if(mysql_num_rows($sql) >= 10) {
/* Another Select with Loop */
}
?>

如果应用程序已经有了大数据,这将减缓应用程序的速度。那我该怎么办?我只是想看看父母是否已经有了10个孩子,新成员是否是孙女,但如果每个孩子已经有10个孩子,新成员将是孙辈。有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2018-01-03 13:00:51

在不查询数据库的情况下,您无法评估一个空闲的"spot“,但是可以通过选择具有特定层次结构级别的"spot”的所有用户来减少查询的数量,而不是单独查询每个父级:

代码语言:javascript
复制
$parents = NULL;
do {
    if ($parents === NULL) {
        $parentsQuery = 'SELECT t.user_id FROM table_name as t WHERE t.parent_id IN [' . implode(',', $parents)  . '];';
        $parentResult = msqli_query($dbConnection, $parentQuery);
        $parents = $parentResult->fetch_all();
        $parents = array_map(function($parentRow){
                return $parentRow['user_id'];
            }, $parents);
    } else {
        $parents = [$_POST['parent']];
    }
    $query = 'SELECT parent.user_id FROM table_name as parent JOIN table_name as child ON child.parent_id = parent.user_id WHERE parent.user_id IN [' . implode(',', $parents)  . '] AND count(child.*) < 10 GROUP_BY parent.user_id ORDER BY parent.user_id;';
    $result = msqli_query($dbConnection, $query);
while ($result->num_rows === 0 && !empty($parents));

// First parent that has less than 10 children
$parent= mysqli_fetch_assoc($result)['user_id'];

代码可能会减少运行时,但循环越深,运行速度也会越慢。由于最大嵌套级别,此代码最多将在数据库上运行20个查询。(10个子查询,在更深的层次上是非常密集的负载,10个快速的,但更多的内存密集型父查询)

该代码还没有经过测试,但只是为了引导您找到一个更快的解决方案。在安全和稳定方面也需要改进。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48077203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档