sql >> Databasteknik >  >> RDS >> Mysql

Kategorihierarki (PHP/MySQL)

När du använder en närliggande listmodell kan du generera strukturen i en omgång.

Taget från One ​​Pass Parent- Child Array Structure (sep 2007; av 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;
    }
}

Från den länkade artikeln, här är ett utdrag för att skapa en lista för utdata. Den är rekursiv, om det finns ett barn för en nod, anropar den sig själv igen för att bygga upp underträdet.

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

Relaterad fråga:



  1. fråga för horisontell layout av mysql-data

  2. Kapslade loopar och Performance Spools

  3. Dela strängen i sql-servern

  4. Ändra avgränsaren till ett kommatecken när du skickar frågeresultat via e-post i SQL Server (T-SQL)