sql >> Database >  >> RDS >> Mysql

Recursieve categorieën met een enkele zoekopdracht?

Als de boom niet te groot is, kun je de boom eenvoudig in PHP bouwen met behulp van enkele slimme verwijzingen.

$nodeList = array();
$tree     = array();

$query = mysql_query("SELECT category_id, name, parent FROM categories ORDER BY parent");
while($row = mysql_fetch_assoc($query)){
    $nodeList[$row['category_id']] = array_merge($row, array('children' => array()));
}
mysql_free_result($query);

foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);

Dit geeft je de boomstructuur in $tree met de kinderen in de respectievelijke children -slot.

We hebben dit gedaan met vrij grote bomen (>1000 items) en het is erg stabiel en een stuk sneller dan recursieve zoekopdrachten in MySQL.



  1. JDeveloper gebruiken met MySQL Database en Oracle Database op AWS RDS, deel 3

  2. PostgreSQL versus Oracle:verschil in kosten, gebruiksgemak en functionaliteit

  3. Functie om een ​​dynamische set kolommen voor een bepaalde tabel te retourneren

  4. hoe de kolom voor automatisch verhogen in te stellen met sql-ontwikkelaar