Maison  >  Article  >  base de données  >  Comment obtenir tous les nœuds enfants et descendants d'un parent dans MySQL à l'aide de PHP ?

Comment obtenir tous les nœuds enfants et descendants d'un parent dans MySQL à l'aide de PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-07 02:13:02646parcourir

How to Get All Child and Descendant Nodes for a Parent in MySQL Using PHP?

Obtenez tous les nœuds enfants, petits-enfants, etc. sous parent en utilisant PHP avec les résultats de requête MySQL

Cet article vous guidera à travers une méthode pour récupérer tous les nœuds enfants et descendants pour un parent spécifié utilisant PHP avec les résultats de requête MySQL. Cette technique élimine le besoin de construire un tableau multidimensionnel de la structure arborescente et vous permet d'obtenir tous les nœuds directement.

Considérez une table MySQL organisée comme une liste de contiguïté, où les données hiérarchiques sont représentées par des colonnes pour l'identifiant, le nom. et parent_id. La requête SQL suivante peut récupérer toutes les lignes de cette table dans un tableau associatif :

$r = mysql_query("SELECT * FROM test ");
$data = array();
while($row = mysql_fetch_assoc($r)) {
  $data[] = $row;
}

Supposons que nous souhaitions filtrer ce tableau pour les nœuds sous un parent avec l'identifiant 3, y compris le parent lui-même. Cette fonction fetch_recursive personnalisée peut accomplir ceci :

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) {
  foreach($src_arr as $row) {
    if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) {
      $rowdata = array();
      foreach($row as $k => $v)
        $rowdata[$k] = $v;
      $cats[] = $rowdata;
      if($row['parent_id'] == $currentid)
        $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
    }
  }
  return $cats;
}

Pour utiliser cette fonction, transmettez le tableau $data obtenu à partir de la requête comme premier argument et l'identifiant du parent pour lequel vous souhaitez récupérer les nœuds enfants comme le deuxième argument :

$list = fetch_recursive($data, 3);

$list contiendra désormais un tableau associatif avec tous les nœuds enfants et le nœud parent (id 3) inclus.

Cette solution récupère efficacement tous les nœuds enfants et descendants pour un parent spécifié sans avoir besoin de construction d'une structure arborescente multidimensionnelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn