sql >> Databáze >  >> RDS >> Mysql

Nejjednodušší způsob, jak postavit strom ze seznamu předků

Prvním klíčem je seřadit výsledky SQL podle počtu předků. Udělal jsem to v PHP, protože se vyhýbám složitosti víceciferných čísel.

To poskytuje seznam uzlů v pořadí, ve kterém mohou být platně vloženy.

Array
(
    [1] => Array
        (
            [0] => 1
        )

    [4] => Array
        (
            [0] => 4
            [1] => 1
        )

    [2] => Array
        (
            [0] => 2
            [1] => 1
        )

    [3] => Array
        (
            [0] => 3
            [1] => 1
            [2] => 2
        )

)

V tuto chvíli mě nezajímají klíče, pouze seznamy předků. Cestu stromem lze nalézt mezi průsečíkem dostupných uzlů a zbývajícími předky.

  function add_node($ancestors, &$tree) {
    if (count($ancestors) == 1) {
      $tree[array_pop($ancestors)] = array();
      return;
    }   
    $next_node = array_intersect($ancestors, array_keys($tree));
    $this->add_node(
        array_diff($ancestors, $next_node) , 
        $tree[array_pop($next_node)]
        );  
  }


  1. Android + MySQL pomocí com.mysql.jdbc.Driver

  2. Jak vytvořit tabulku v návrhovém zobrazení v Accessu 2016

  3. Jaká je maximální velikost MySQL VARCHAR?

  4. moje transakce není rollback, když se něco pokazí v C# s mysql?