"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo obtener todos los nodos secundarios y descendientes de un padre en MySQL usando PHP?

¿Cómo obtener todos los nodos secundarios y descendientes de un padre en MySQL usando PHP?

Publicado el 2024-11-09
Navegar:281

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

Obtenga todos los nodos secundarios, nietos, etc. bajo el nivel principal usando PHP con resultados de consultas MySQL

Este artículo lo guiará a través de un método para recuperar todos los nodos secundarios y descendientes para un padre específico que usa PHP con resultados de consultas MySQL. Esta técnica elimina la necesidad de construir una matriz multidimensional de la estructura de árbol y le permite obtener todos los nodos directamente.

Considere una tabla MySQL organizada como una lista de adyacencia, donde los datos de la jerarquía se representan con columnas para id, nombre y parent_id. La siguiente consulta SQL puede recuperar todas las filas de esta tabla en una matriz asociativa:

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

Supongamos que queremos filtrar esta matriz para nodos bajo un padre con ID 3, incluido el padre mismo. Esta función fetch_recursive personalizada puede lograr esto:

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;
}

Para usar esta función, pase la matriz $data obtenida de la consulta como primer argumento y la identificación del padre del que desea recuperar los nodos secundarios como segundo argumento:

$list = fetch_recursive($data, 3);

$list ahora contendrá una matriz asociativa con todos los nodos secundarios y el nodo principal (id 3) incluido.

Esta solución recupera eficientemente todos los nodos secundarios y descendientes de un padre específico sin la necesidad de construir una estructura de árbol multidimensional.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3