sql >> Databasteknik >  >> RDS >> Mysql

Enklaste sättet att bygga ett träd från en lista över förfäder

Den första nyckeln är att sortera SQL-resultaten efter antalet förfäder. Jag gjorde detta i PHP eftersom jag undviker komplexiteten med flersiffriga tal.

Detta ger en lista över noder i en ordning som de kan infogas på ett giltigt sätt.

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
        )

)

Vid det här laget bryr jag mig inte om nycklarna, bara listorna över förfäder. Vägen genom trädet kan hittas mellan skärningspunkten mellan tillgängliga noder och de återstående förfäderna.

  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. mysql-fråga för att välja alla utom något

  2. Hur MID()-funktionen fungerar i MySQL

  3. HUR väljer min från cast varchar till int i mysql

  4. order by newid() - hur fungerar det?