0

使用 PHP 和 MySQL。

我有一个表(类别),只有三个字段,idnameparent

其中parent在根类别上为 0,如果它是从另一个派生的,则为整数。

但是我们可以在其中有几个级别,例如:

id, name, parent
01, Name 01, 00
02, Name 02, 00
03, Name 03, 00
04, Name 04, 02
05, Name 05, 01
06, Name 06, 01
07, Name 07, 05
08, Name 07, 05
09, Name 09, 04
10, Name 10, 07
11, Name 11, 10

我们如何返回一个包含根及其所有子节点的数组?例如,对于 id=1,数组应该是:

array (
    1 => array(
        id => 1,
        name => 'Name 1'
    ),
    5 => array(
        id => 5,
        name => 'Name 5'
    ),
    6 => array(
        id => 6,
        name => 'Name 6'
    ),
    7 => array(
        id => 7,
        name => 'Name 7'
    ),
    8 => array(
        id => 8,
        name => 'Name 8'
    ),
    10 => array(
        id => 10,
        name => 'Name 10'
    ),
    11 => array(
        id => 11,
        name => 'Name 11'
    )
);

我看过这个链接并尝试了一些变化,但我还没有成功。

4

1 回答 1

1

这个 SQL 查询应该得到你想要的数据:

    SELECT DISTINCT c.id as id, c.name as name FROM category c, category s WHERE s.parent = $id OR c.id = $id;

然后你可以mysqli_fetch_assoc用来获取你需要的数组的一部分。如果您需要数组索引与 SQL 索引匹配,那么您可以迭代结果mysqli_fetch_assoc并将其放入一个新数组中:

    $target = array();
    while ( $row = mysqli_fetch_assoc( $result ) ) {
         $target[$row["id"]] = $row;
    }
于 2013-02-08T17:20:10.670 回答