sql >> Database >  >> RDS >> Mysql

Categoriehiërarchie (PHP/MySQL)

Wanneer u een aangrenzend lijstmodel gebruikt, kunt u de structuur in één keer genereren.

Overgenomen van One ​​Pass Parent- Onderliggende matrixstructuur (september 2007; door Nate Weiner) :

$refs = array();
$list = array();

$sql = "SELECT item_id, parent_id, name FROM items ORDER BY name";

/** @var $pdo \PDO */
$result = $pdo->query($sql);

foreach ($result as $row)
{
    $ref = & $refs[$row['item_id']];

    $ref['parent_id'] = $row['parent_id'];
    $ref['name']      = $row['name'];

    if ($row['parent_id'] == 0)
    {
        $list[$row['item_id']] = & $ref;
    }
    else
    {
        $refs[$row['parent_id']]['children'][$row['item_id']] = & $ref;
    }
}

Van het gelinkte artikel is hier een fragment om een ​​lijst voor uitvoer te maken. Het is recursief, als er een kind voor een knoop is, roept het zichzelf opnieuw op om de subboom op te bouwen.

function toUL(array $array)
{
    $html = '<ul>' . PHP_EOL;

    foreach ($array as $value)
    {
        $html .= '<li>' . $value['name'];
        if (!empty($value['children']))
        {
            $html .= toUL($value['children']);
        }
        $html .= '</li>' . PHP_EOL;
    }

    $html .= '</ul>' . PHP_EOL;

    return $html;
}

Gerelateerde vraag:



  1. hoe te gebruiken (useUnicode=yes characterEncoding=UTF-8) met DBCP

  2. Fout:Client ondersteunt het door de server gevraagde authenticatieprotocol niet; overweeg om MySQL-client te upgraden

  3. Haal het meeste uit uw PostgreSQL-indexen

  4. java.lang.AbstractMethodError:com.mysql.jdbc.PreparedStatement.setBlob(ILjava/io/InputStream;)V