Foros del Web » Programando para Internet » PHP »

¿ Cual sería la mejor forma de mostrar estos datos ?

Estas en el tema de ¿ Cual sería la mejor forma de mostrar estos datos ? en el foro de PHP en Foros del Web. Hola a todos Estoy diseñando un gestor de contenidos en php en el que el usuario puede crear categorias y dentro de estas otras y ...
  #1 (permalink)  
Antiguo 31/10/2012, 08:57
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 20 años, 6 meses
Puntos: 18
¿ Cual sería la mejor forma de mostrar estos datos ?

Hola a todos

Estoy diseñando un gestor de contenidos en php en el que el usuario puede crear categorias y dentro de estas otras y dentro de estas otras etc..

Para realizar esto he creado una tabla Mysql con tres campos:
- id_categoria (El id de la categoria)
- nombre_categoria (El nombre)
- categoria_descendiente_id (El id de la categoria que es descendiente)

Si se trata de la categoria índice, es decir, la inicial, el campo categoria_descendiente_id tendrá el valor 0 en caso contrario contendrá el id de la categoria a la que pertenece.

Hasta aquí todo bien, el asunto es que deseo mostrar al usuario la ruta completa de categorias en referencia a la actual, por ejemplo, si el usuario se encuentra actualmente en "Manga larga", mostrar la ruta completa:

Ropa > Camisas > Manga larga

Podría realizar un bucle while y realizar un select de cada categoria pero me gustaría saber si existe un modo de hacerlo mediante una sola sentencia select

¿Que sentencia select usaríais para mostrar la ruta actual de categorias ?

Un saludo!
  #2 (permalink)  
Antiguo 31/10/2012, 10:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ¿ Cual sería la mejor forma de mostrar estos datos ?

Mostrar, no es tema de MySQL, sino de programación.
Este tipo de detalles es mejor que los trates en el Foro de PHP, según el lenguaje que comentas que usarás.

te paso el post para allá.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 31/10/2012, 10:27
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿ Cual sería la mejor forma de mostrar estos datos ?

Hola davidj:

Como menciona gnzsoloyo, esto pareciera ser más bien un tema de programación, pero como mencionas que lo quieres hacer en un solo SELECT, trataré de centrarme sólo en el tema de SQL...

MySQL no soporta consultas jerárquicas, sin embargo, si tienes una "profundidad" fija, es decir, que conoces cuál es el número de nodos enlazados que tiene tu árbol podrías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------------+------------------+---------------------------+
  3. | id_categoria | nombre_categoria | categoria_descendiente_id |
  4. +--------------+------------------+---------------------------+
  5. |            1 | Ropa             |                         0 |
  6. |            2 | Camisas          |                         1 |
  7. |            3 | Manga larga      |                         2 |
  8. +--------------+------------------+---------------------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT T1.id_categoria,
  12.     ->        CONCAT(IFNULL(CONCAT(T3.nombre_categoria, ' > '), ''),
  13.     ->               IFNULL(CONCAT(T2.nombre_categoria, ' > '), ''),
  14.     ->               T1.nombre_categoria) arbol
  15.     -> FROM tabla T1
  16.     -> LEFT JOIN tabla T2 ON T1.categoria_descendiente_id = T2.id_categoria
  17.     -> LEFT JOIN tabla T3 ON T2.categoria_descendiente_id = T3.id_categoria;
  18. +--------------+------------------------------+
  19. | id_categoria | arbol                        |
  20. +--------------+------------------------------+
  21. |            1 | Ropa                         |
  22. |            2 | Ropa > Camisas               |
  23. |            3 | Ropa > Camisas > Manga larga |
  24. +--------------+------------------------------+
  25. 3 rows in set (0.00 sec)

Te repito, si la profundidad de tu árbol es más grande, la consulta se podría complicar mucho, pero con pocas dependencias igual y te puede servir...

Checa también esta página:

http://dev.bombozama.info/datos-jera...en-php-y-mysql

Creo que te puede servir también..

Saludos
Leo.
  #4 (permalink)  
Antiguo 02/11/2012, 10:06
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 20 años, 6 meses
Puntos: 18
Respuesta: ¿ Cual sería la mejor forma de mostrar estos datos ?

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola davidj:

Como menciona gnzsoloyo, esto pareciera ser más bien un tema de programación, pero como mencionas que lo quieres hacer en un solo SELECT, trataré de centrarme sólo en el tema de SQL...

MySQL no soporta consultas jerárquicas, sin embargo, si tienes una "profundidad" fija, es decir, que conoces cuál es el número de nodos enlazados que tiene tu árbol podrías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------------+------------------+---------------------------+
  3. | id_categoria | nombre_categoria | categoria_descendiente_id |
  4. +--------------+------------------+---------------------------+
  5. |            1 | Ropa             |                         0 |
  6. |            2 | Camisas          |                         1 |
  7. |            3 | Manga larga      |                         2 |
  8. +--------------+------------------+---------------------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT T1.id_categoria,
  12.     ->        CONCAT(IFNULL(CONCAT(T3.nombre_categoria, ' > '), ''),
  13.     ->               IFNULL(CONCAT(T2.nombre_categoria, ' > '), ''),
  14.     ->               T1.nombre_categoria) arbol
  15.     -> FROM tabla T1
  16.     -> LEFT JOIN tabla T2 ON T1.categoria_descendiente_id = T2.id_categoria
  17.     -> LEFT JOIN tabla T3 ON T2.categoria_descendiente_id = T3.id_categoria;
  18. +--------------+------------------------------+
  19. | id_categoria | arbol                        |
  20. +--------------+------------------------------+
  21. |            1 | Ropa                         |
  22. |            2 | Ropa > Camisas               |
  23. |            3 | Ropa > Camisas > Manga larga |
  24. +--------------+------------------------------+
  25. 3 rows in set (0.00 sec)

Te repito, si la profundidad de tu árbol es más grande, la consulta se podría complicar mucho, pero con pocas dependencias igual y te puede servir...

Checa también esta página:

http://dev.bombozama.info/datos-jera...en-php-y-mysql

Creo que te puede servir también..

Saludos
Leo.

Primero, gracias de antemano.

Tomo nota, aunque no sabría la profundidad, es decir, no sabría el árbol de categorias descendientes y por tanto, como tu comentas, el código que me has facilitado no sería útil.

¿Alguien tiene alguna otra idea para hacerlo ?
  #5 (permalink)  
Antiguo 02/11/2012, 11:05
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años
Puntos: 76
Respuesta: ¿ Cual sería la mejor forma de mostrar estos datos ?

podrias hacer una tabla que tenga una estructura tipo arbol recursivo, algo asi:



Código SQL:
Ver original
  1. CREATE TABLE miga
  2. (
  3. id INT  PRIMARY KEY IDENTITY(1,1) NOT NULL,
  4. id_padre INT NOT NULL,
  5. nombre VARCHAR(50) NOT NULL
  6. )

por ejemplo:

Código:
id      id_padre    nombre

1       0     Inicio      //  ---> Inicio
2       1     Camisas      //  ---> Inicio --> Camisas
3       2     Pantalones      //  ---> Inicio --> Pantalones
  #6 (permalink)  
Antiguo 02/11/2012, 11:07
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: ¿ Cual sería la mejor forma de mostrar estos datos ?

Hola davidj,

Esta pregunta se repite una y otra vez, parece que el buscador del foro no funciona :P, ahora en serio, te sugiero que busques info sobre los dos modelos mas utilizados, adjacency list(lo que te propone leonardo) y nested set, te dejo una referencia al primero(sin recursividad ;) ) http://jdbartlett.com/2008/01/15/tre...cy-list-model/

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 03/11/2012, 08:17
 
Fecha de Ingreso: octubre-2003
Ubicación: España
Mensajes: 1.067
Antigüedad: 20 años, 6 meses
Puntos: 18
Respuesta: ¿ Cual sería la mejor forma de mostrar estos datos ?

gracias a todos, le daré un vistazo

Etiquetas: select, sql, tabla, formulario, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:52.