sql >> Database teknologi >  >> RDS >> Mysql

Rekursive kategorier med en enkelt forespørgsel?

Hvis træet ikke er for stort, kan du blot bygge træet i PHP ved hjælp af nogle smarte referencer.

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

Dette vil give dig træstrukturen i $tree med børnene i de respektive children -slot.

Vi har gjort dette med ret store træer (>> 1000 elementer), og det er meget stabilt og meget hurtigere end at lave rekursive forespørgsler i MySQL.



  1. Hvordan ændrer jeg min session til at vise UTF8 i Oracle?

  2. MySQL Group By og Sum total værdi af anden kolonne

  3. Advarsel:mysqli_query():Kunne ikke hente mysqli

  4. Kan du ikke bruge en LIKE-forespørgsel i en JDBC PreparedStatement?