Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/09/2014, 16:49
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Sumar registros en función recursiva

Lo que te ha puesto @paketetrueke en realidad es bastante simple, y no es que se trate de una propiedad mágica o esotérica. Es, a mi entender, un atributo que permite saber que aún hay valores a sumar. Es decir, no es un codigo para que hagas Copy+Paste, sino uno que te oriente en la logica de un cálculo recursivo.

Recordemos que una función recursiva es una función donde dada una condición, se vuelve a invocar a sí misma, con el parámetro de entrada como parámetro de la llamada, creciente o decreciente en función de lo que se necesita.
Además toda función recursiva debe tener un "punto de corte", es decir una salida por else que retorne la cascada de la recursividad al inicio, para devolver el resultado.

En tu ejemplo lo que pareces buscar es saber cuántas subcategorias tiene una categoría dada, considerando que por cada subcategoría podría haber una o mas categorías.

Pero lo que estás haciendo en ningún momento devuelve un valor numérico, sino que retorna una cadena. PAra que PHP te tome el valor devuelto como numero, además de SER un numero, debe realizarse una operación aritmética con él... y eso no lo haces.
Yo probaría algo como:
Código PHP:
Ver original
  1. function get_tree($id) {
  2.     // buscar las categorías
  3.     $result = mysql_query("SELECT * FROM categorias WHERE parent_id='$id'");
  4.     // Declarar una variable numerica
  5.     if ($result)
  6.         {
  7.         if (!isset($level))
  8.             {$level = 0;}
  9.         // Por cada registro obtenido
  10.         if (mysql_num_rows($result) > 0)
  11.             {
  12.             while ($row = mysql_fetch_array($result))
  13.                 {
  14.                 // DEvolvio registros, tiene hijos y los busca
  15.                 $level = $level + get_tree($row['id']);
  16.                 }
  17.             return $level;
  18.             }
  19.        else
  20.            // No devolvio registros.
  21.            {return 0;}
  22.         }
  23.     else
  24.         // Generó error. Sale con cero (esto puede corregirse para detectar errores de MySQL
  25.         {return 0;}
  26. }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)