sql >> Database teknologi >  >> RDS >> Mysql

Kategorihierarki (PHP/MySQL)

Når du bruger en tilstødende listemodel, kan du generere strukturen i én omgang.

Taget fra One ​​Pass Parent- Child Array Structure (sep 2007; af 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;
    }
}

Fra den linkede artikel er her et uddrag til at oprette en liste til output. Det er rekursivt, hvis der er børn til en node, kalder det sig selv igen for at bygge undertræet op.

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;
}

Relateret spørgsmål:



  1. Hvorfor er referencer til wp_postmeta så langsomme?

  2. Vis alle aktuelle låse fra get_lock

  3. SQL VÆLG SUM

  4. Konverter DateTime i C# til yyyy-MM-dd format og gem det i MySql DateTime Field