elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 12:33  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  Arbol multinivel con una sola consulta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arbol multinivel con una sola consulta  (Leído 1,713 veces)
Alex_bro


Desconectado Desconectado

Mensajes: 1.228



Ver Perfil
Arbol multinivel con una sola consulta
« en: 20 Julio 2011, 15:01 »

Buenas,
gracias a todos por la ayuda, y un especial saludo a madpitbull_99 y a дٳŦ* (Para mi ING xD) por su ayuda en mi anterior tema.

Tengo un problemilla que seguramente es una tonteria, pero bueno desde ayer estoy googleando y no le encuentro solucion clara.
Quiero crear un menu, con categorias y dentro de estas, sus subcategorias, pero que se pueda generar con una sola consulta a MySQL. Yo tengo una tabla con las columnas cat_id, catpadre_id, cat_nombre ... y en todos sitios recomiendan hacer una consulta inicial con catpadre_id = 0 y luego con un bucle ir haciendo consultas de cada categoria para sacar las subcategorias.... pero eso me parece un devorador de recursos cuando el arbol sea medianamente grande...

Como se les ocurre que puedo hacerlo sin tener que recurrir a esos cientos de consultas sql?

Gracias :)


En línea

JustHost.com Suck´s
Alojamiento que recomiendo: (Enlace de afiliado)
CrisQC

Desconectado Desconectado

Mensajes: 170



Ver Perfil WWW
Re: Arbol multinivel con una sola consulta
« Respuesta #1 en: 28 Julio 2011, 08:24 »

Se puede hacer de muchas formas.
Para mi es una bestialidad ( sin ofender a nadie ) hacer tantas consultas para algo tan simple.
Es más óptimo no molestar tanto a la base de datos, traer todo lo que necesites en una sola consulta y luego "desmenuzarlo".

Por ejemplo:

categoría_0   sub-categoría_0
categoría_0   sub-categoría_1
categoría_1   sub-categoría_2
categoría_1   sub-categoría_3
categoría_1   sub-categoría_4
categoría_2   sub-categoría_5
categoría_2   sub-categoría_6
categoría_3   sub-categoría_7

Entonces usas una variable por ejemplo $categoria_actual, donde almacenás el valor de la categoría de la cual buscas sub-categorías, y con un while vas buscando las sub-categorías y las agregas.
Cuando ya no tengas sub-categorías, pasas a la siguiente categoría..
Espero se entienda.


En línea

- ODIO LA LIBRERÍA CONIO
- ODIO .NET
- ODIO los archivos comprimidos con contraseña.
- ODIO las páginas con flash
- ODIO el Deep Freeze
Alex_bro


Desconectado Desconectado

Mensajes: 1.228



Ver Perfil
Re: Arbol multinivel con una sola consulta
« Respuesta #2 en: 11 Agosto 2011, 20:14 »

Muchas gracias por la respuesta :)

La verdad es que tienes razon en que es una bestialidad, y mas cuando en muchos hostings limitan el numero de consultas a la db por hora.

El tema de tratamiento con arrays de esa forma me cuesta bastante... si bien es cierto en estos dias he encontrado sitios que recomiendan hacer lo que dices, yo no consigo hacerme un esquema mental del codigo... pero tengo que superar algun dia eso jaja. Si consigo hacerlo posteo aqui la solucion :)

Gracias de nuevo =D
En línea

JustHost.com Suck´s
Alojamiento que recomiendo: (Enlace de afiliado)
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



Ver Perfil
Re: Arbol multinivel con una sola consulta
« Respuesta #3 en: 11 Agosto 2011, 21:52 »

Puedes guardar TODOS los datos serializados en la DB...


Serialization
« Última modificación: 11 Agosto 2011, 21:53 por ~ Yoya ~ » En línea

Alex_bro


Desconectado Desconectado

Mensajes: 1.228



Ver Perfil
Re: Arbol multinivel con una sola consulta
« Respuesta #4 en: 14 Agosto 2011, 16:29 »

Buenas,
gracias a los 2 :) ya casi lo tengo, vamos he conseguido ordenar todo con el codigo que pongo ha continuacion, pero necesito una ayudita.

Código
function ordenarCats($tree,$parent=0){
$tree2 = array();
$tree3 = array();
       foreach($tree as $i => $item){
           if($item['padre_id'] == $parent){
               $tree2[$item['cat_id']] = $item;
               $tree2[$item['cat_id']]['subcats'] = ordenarCats($tree, $item['cat_id']);
           }
       }
 
       return array_values($tree2); /** Reindexamos */
}

Esto me genera un arbol donde cada categoria tiene dentro otros arrays con sus subcategorias... haciendo un sistema de profundidad ilimitada, pero para mostrarlo en la plantilla necesito que todo este a un solo nivel, para no tener que mezclar tanto codigo en la plantilla html metiendo una funcion recursiva... creo que es mas limpio un simple for y yasta, no se si me explico.

He intentado eso con el siguiente codigo, pero no funciona:

Código
function convert($tree){
$tree3 = array();
foreach($tree as $i => $item){
$tree3[] = $item;
convert($item['subcats']);
}
return $tree3;
}

Gracias de ante mano por todo :)
En línea

JustHost.com Suck´s
Alojamiento que recomiendo: (Enlace de afiliado)
CrisQC

Desconectado Desconectado

Mensajes: 170



Ver Perfil WWW
Re: Arbol multinivel con una sola consulta
« Respuesta #5 en: 15 Agosto 2011, 03:00 »

A ver mira te dejo un código que podrías modificar, para que no te hagas tantos líos con llamadas recursivas y eso. Verificalo:

Código
$categoria_actual;
$primera_vuelta = true;
while( $fila = mysql_fetch_row( $resultado ) )
{
if( $primer_vuelta )
{
$categoria_actual = $fila[ 0 ];
echo "<ul>";
echo "<li>";
echo $categoria_actual;
echo "<ul>";
$primera_vuelta = false;
}
else
{
if( $categoria_actual != $fila[ 0 ] )
{
$categoria_actual = $fila[ 0 ];
echo "</ul>";
echo "</li>";
echo "<li>";
echo $categoria_actual;
echo "<ul>";
}
}
echo "<li>";
echo $fila[ 1 ];
echo "</li>";
}
echo "</ul>";
echo "</li>";
echo "</ul>";
 
« Última modificación: 15 Agosto 2011, 03:02 por CrisQC » En línea

- ODIO LA LIBRERÍA CONIO
- ODIO .NET
- ODIO los archivos comprimidos con contraseña.
- ODIO las páginas con flash
- ODIO el Deep Freeze
Alex_bro


Desconectado Desconectado

Mensajes: 1.228



Ver Perfil
Re: Arbol multinivel con una sola consulta
« Respuesta #6 en: 15 Agosto 2011, 22:22 »

Muchas gracias, voy a estudiarlo y ver que tal me salen las modificaciones, y luego publico una respuesta :)
En línea

JustHost.com Suck´s
Alojamiento que recomiendo: (Enlace de afiliado)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mi arbol
Diseño Gráfico
Azielito 1 522 Último mensaje 4 Marzo 2004, 02:28
por StraTovario
Arbol trie, alguien ha implementado alguna vez un arbol trie?
Programación C/C++
LINZ 2 3,027 Último mensaje 8 Agosto 2007, 12:51
por dakomt
Estructura arbol
PHP
chicuela66 3 726 Último mensaje 9 Febrero 2008, 20:11
por dimitrix
Varios insert en una sola consulta (mysql)
Desarrollo Web
redired 4 7,683 Último mensaje 18 Enero 2009, 19:28
por ^Tifa^
Arbol AVL
Java
arkaos 6 7,211 Último mensaje 31 Mayo 2009, 05:33
por arkaos
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines