0

PHP と MySQL を使用します。

idnameparentの 3 つのフィールドのみを持つテーブル (カテゴリ) があります。

はルート カテゴリでは 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 に答える