"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-09
Parcourir:890

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

Obtenir tous les nœuds enfants, petits-enfants, etc. sous le 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 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 nœuds enfants et descendants pour un parent spécifié sans avoir besoin de construction d'une structure arborescente multidimensionnelle.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3