sql >> Databasteknik >  >> RDS >> Mysql

Rekursiva kategorier med en enda fråga?

Om trädet inte är för stort kan du helt enkelt bygga trädet i PHP med hjälp av några smarta referenser.

$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);

Detta ger dig trädstrukturen i $tree med barnen i respektive children -plats.

Vi har gjort det här med ganska stora träd (>> 1000 objekt) och det är mycket stabilt och mycket snabbare än att göra rekursiva frågor i MySQL.



  1. Ladda Postgres dump efter docker-compose up

  2. Hur skriver man en fråga som gör något som liknar MySQL:s GROUP_CONCAT i Oracle?

  3. MySql skillnad mellan två tidsstämplar i dagar?

  4. Hur man laddar ner Postgres bytea kolumn som fil