PHP-SQL表中的嵌套数据树

时间:2019-02-21 09:10:08

标签: php mysql loops

我有一个SQL表,其中包含一个零件列表,其中包含子零件。我需要想出一种将数据输出到树中的方法,以显示其他内容。

该表如下:

Part_Number | Sub_Part
1             1a
1             1b
1             1c
1a            1a0
1a            1a1
1b            1b0
2

因此,我需要输出如下内容:

-1
--1a
---1a0
---1a1
--1b
---1b0
--1c
-2

我想不出解决方案,我曾尝试在循环中使用循环来获取信息,但我能得到的最好的结果是每一层的第一个子部分:1、1a,1a0。

<?php $lookup = ['1']; ?>
    <?php 
        x: 
        $i = $i . '-';
    ?>

    <?php foreach($lookup as $look) : ?>
        <p><?php echo $i . $look; ?></p>
        <?php $lookup = []; ?>

        <?php $query = mysqli_query($conn, "SELECT Sub_Part FROM `Bill_Of_Materials` WHERE Part_Number = '{$look}'"); ?>
        <?php while($search = mysqli_fetch_array($query)) : ?>
            <?php array_push($lookup, $search[0]); ?>
        <?php endwhile; ?>

        <?php goto x; ?>
    <?php endforeach; ?>

我认为最好的方法可能是为每个顶级部件创建对象,然后有一个递归循环为其中的每个子部件以及其中的每个子部件创建对象。

但是,对象对我来说还是很新的,所以这可能吗?

2 个答案:

答案 0 :(得分:0)

您可以使用此查询...以所需的方式简单地获取数据...我已经用查询:D

完成了此操作
   select t1.Part_Number as parent,t1.parts as g1 from table1 t2 right join (select Part_Number,group_concat(Sub_Part) as parts from table1 group by Part_Number) t1 on t1.Part_Number =  SUBSTRING(t2.Sub_Part, 1, CHAR_LENGTH(t2.Sub_Part)-1) group by t1.Part_Number

答案 1 :(得分:0)

我设法自己解决了这个问题,方法是创建一个对象,然后在SQL表中搜索子部分,并为每个子对象创建另一个对象。

class part {
    function __construct($partNumber, $layer = '-') {
        echo $layer . $partNumber . '<br>';

        $conn = mysqli_connect('localhost', 'user', 'pass', 'database');

        if(!$conn) {
            die('Connection Failed: ' . mysqli_connect_error());
        }

        $subs = mysqli_query($conn, "SELECT Sub_Part FROM `Bill_Of_Materials` WHERE Part_Number = '{$partNumber}'");

        while($sub = mysqli_fetch_assoc($subs)) {
            $sub = new part($sub['Sub_Part'], $layer . '-');
        }
    }
}

$a = new part('123');