2017-08-27 65 views
0

我有,其中有ID,parentId的和名称的列保存IDS在一个数组

我想跟踪PARENT_ID高达十级,并将其存储在一个数组“级[]” 有一个SQL表for循环

例如:我有一个id = 100
该id PARENT_ID = 80

ID NO 80具有PARENT_ID = 72 该ID具有PARENT_ID = 64 等等...

这样,我想这些parent_ids在数组名各级[]保存

如果有人需要更多信息PLZ评论

回答

0

这将这样的伎俩

$level[0] = $parent_id; 
     for ($i=0; $i<6; $i++) 
     { 
      $j = $i+1; 
      $search = "SELECT parent_id FROM `$database`.`$mem` where id='$level[$i]'"; 
      $result = mysqli_query($con, $search); 
      $row = mysqli_fetch_array($result); 
      $level[$j] = $row['parent_id']; 
     } 
0

据我了解,你要保存一些数据从数据库中读取的水平阵列

您可以使用PDO与任何风格的获取你想要PDO Fetch All

0

既然你没有指定你正在使用的有效SQL,我会给你的算法:

getDescendantsOf(id, limit) 
    result <- id 
    parent <- <select parent id> 
    while not (parent is null) and limit > 0 
     result <- parent + ',' + result 
     parent <- <select parent id> 
     limit <- limit - 1 
    end while 
    return result 
end getDescendantsOf 

这不是SQL代码,不要试图执行它。这是一个可以在SQL中实现的算法。

编辑:

这是一个如何创建一个存储MySQL的函数:https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

这是一个如何在MySQL连接一个VARCHAR到另一个:https://bugs.mysql.com/bug.php?id=7642

这是一个如何使用MySQL中的变量:https://dev.mysql.com/doc/refman/5.7/en/user-variables.html

这是如何在MySQL中使用while循环:https://dev.mysql.com/doc/refman/5.7/en/while.html

这是怎样一个MySQL的存储过程或函数可以从PHP被称为:http://www.devx.com/webdev/Article/42887/0/page/2

所以,你需要实现在MySQL存储功能将包含一个while循环。 while循环的每次迭代都会将先前找到的项目的父项前置到varchar,并且存储的函数将返回一个varchar,其中包含由逗号分隔的族谱。你将需要从PHP调用这个,你会得到这些ID。从那里你可以使用这个字符串,无论你需要它的目的。

+0

我不理解一个词,我其实用mysqli的,PHP变量,循环..你可以显示此logrithms使用这些格式 – jolly

+0

@jolly,这是一个算法,而不是对数。对数是一个函数,它可以产生你需要的功率来提高基础以获得参数。这里我们谈论的是一种算法,这是我们计划思考过程发生的方式。你需要在MySQL中实现这个功能,以避免重复发送来自PHP的请求。我编辑了我的答案给你提供进一步的信息。 –

0

您需要使用递归函数来获取所有parent_id

$link = mysqli_connect("localhost", "user", "password", "dbname"); 

function get_all(&$levels, $parent_id = null) 
{ 
    global $link; 

    $sql = "SELECT * FROM table WHERE parent_id " . ($parent_id ? 'IS NULL' : "= $parent_id"); 
    $result = mysqli_query($link, $sql); 

    if ($result && mysqli_num_rows($result) > 0) { 
     while($row = mysqli_fetch_assoc($result)) { 
      if ($row['parent_id']) { 
       $levels[] = $row['parent_id']; 
      } 
      get_all($levels, $row['id']); 
     } 
    } 
} 

$levels = []; 
get_all($levels);