Mysql
 sql >> база данни >  >> RDS >> Mysql

Йерархия на категории (PHP/MySQL)

Когато използвате модел на списък на съседство, можете да генерирате структурата с един проход.

Взето от One ​​Pass Parent- Структура на дъщерния масив (септември 2007 г.; от 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;
    }
}

От свързаната статия, ето фрагмент за създаване на списък за изход. Той е рекурсивен, ако има деца за възел, той се извиква отново, за да изгради поддървото.

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

Свързан въпрос:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL производителност UNION срещу ИЛИ

  2. Промяна на набора от символи по подразбиране на MySQL на UTF-8 в my.cnf?

  3. SonarQube :Как да намалим размера на меры_data.ibd?

  4. свържете ECONNREFUSED - възел js, sql

  5. анализирайте резултатите в MySQL чрез REGEX