将ID保存在数组中

时间:2017-08-27 08:09:45

标签: php sql loops for-loop logic

我有一个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保存在数组名称级别[]

如果有人需要更多信息请注释

4 个答案:

答案 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}}
相关问题