【问题标题】:save ids in an array将 ID 保存在数组中
【发布时间】:2018-02-04 18:34:55
【问题描述】:

我有一个 sql 表,其中有 id、parentid 和 name 列

我想跟踪 parent_id 多达十个级别并将它们存储在数组“level[]”中 带有for循环

例如:我有一个 id=100
这个 id 有 parent_id = 80

id 80 有一个 parent_id = 72 这个 id 有一个 parent_id=64 等等……

通过这种方式,我想将这些 parent_ids 保存在数组名称级别 [] 中

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

【问题讨论】:

    标签: php sql loops for-loop logic


    【解决方案1】:

    据我了解,您希望将从数据库中获取的一些数据保存在级别数组中

    您可以将 PDO 与您想要的任何获取样式一起使用 PDO Fetch All

    【讨论】:

      【解决方案2】:

      您需要使用递归函数来获取所有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】:

        由于您没有指定您正在使用的有效 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。从那里开始,您可以将此字符串用于您需要的任何目的。

        【讨论】:

        • 我一个字都听不懂,我实际上使用的是mysqli、php变量、for循环..你能用这些格式显示这个对数吗
        • @jolly,这是一种算法,而不是对数。对数是一个函数,它产生你需要提高底数以获得参数的功率。在这里,我们谈论的是一种算法,这是我们计划思考过程发生的方式。您将需要在 MySQL 中实现这一点,以避免重复从 PHP 发送请求。我已经编辑了我的答案,以便为您提供更多信息。
        【解决方案4】:

        这样就可以了

        $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'];
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-08
          • 2020-08-29
          • 1970-01-01
          • 2021-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多