我有一个sql表,其中有id,parentid和name
列我希望将parent_id追溯到十个级别,并将它们存储在数组" level []" 带有for循环
例如:我有一个id = 100
这个id有parent_id = 80
id no 80的parent_id = 72 这个id有一个parent_id = 64 等等...
这样我想将这些parent_id保存在数组名称级别[]
中如果有人需要更多信息请注释
答案 0 :(得分:0)
据我所知,你想保存从数据库中的数组中取出的一些数据
您可以将PDO用于您想要的任何获取样式PDO Fetch All
答案 1 :(得分: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
这就是如何从PHP调用MySQL存储过程或函数:http://www.devx.com/webdev/Article/42887/0/page/2
因此,您需要在MySQL中实现一个包含while循环的存储函数。 while循环的每次迭代都会将先前找到的项的父级添加到varchar中,并且存储的函数将返回包含系谱的varchar,以逗号分隔。您需要从PHP调用它,您将获得ID。从那里开始,您可以将此字符串用于您需要的任何目的。
答案 2 :(得分: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);
答案 3 :(得分:0)
这将解决问题
{{1}}