Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta categoria recurrentes

Estas en el tema de Consulta categoria recurrentes en el foro de Mysql en Foros del Web. Hola tengo una tabla llamada categorias de esta manera categorias donde el campo ID_PADRE es el que puede contener a otra categoria, es decir los ...
  #1 (permalink)  
Antiguo 31/10/2012, 17:54
Avatar de ilen  
Fecha de Ingreso: febrero-2009
Mensajes: 125
Antigüedad: 15 años, 2 meses
Puntos: 2
Exclamación Consulta categoria recurrentes

Hola tengo una tabla llamada categorias de esta manera

categorias


donde el campo ID_PADRE es el que puede contener a otra categoria, es decir los que tiene "0" no tienen categoria padre son los principales pero el resto si lo tiene es decir si tiene ID_PADRE = 1 quiere decir que es una subcategoria y su categoria principal es la 1, con esto de puede crear todas las subcategorias que se necesita


Esta es la segunda tabla TRANSACCION

ok hasta hay todo bien se guardan en el campo "ID_CATEGORIA" la subcategoria elegida por el usuario, el preblema es que necesito hacer el query por que el cliente elije una categoria PADRE es decir los que tienen "ID_PADRE" = 0, y me tiene que salir las transacciones que tenga coincidencia esa categoria y las transaccion que tengas subcategorias relacionadas al ID_PADRE

es decir si selecciono LAPIZ me tienen que salir transacciones con la categoria "acrilico", "regla", "marcador", "resaltador" y "LAPIZ" si me hago entender???

como seria la sentencia para de una categoria padre tambien se muestren sus categorias hijas....
Código MySQL:
Ver original
  1. Select.....
  #2 (permalink)  
Antiguo 01/11/2012, 12:27
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta categoria recurrentes

Si solo hay padres e hijas es facil....

Código MySQL:
Ver original
  1. SELECT .....
  2. FROM....
  3. WHERE ID_CATEGORIA = 1
  4.     OR ID_CATEGORIA IN (SELECT id FROM categorias WHERE ID_Padre=1)

Si hay nietas y mas descendientes la cosa se complica...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por gnzsoloyo; 01/11/2012 a las 12:30 Razón: Sin etiquetar.
  #3 (permalink)  
Antiguo 01/11/2012, 12:41
Avatar de ilen  
Fecha de Ingreso: febrero-2009
Mensajes: 125
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Consulta categoria recurrentes

Esque ese es el caso, sub subcategorias de las subcategorias
  #4 (permalink)  
Antiguo 01/11/2012, 13:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta categoria recurrentes

En ese caso necesitas controlar el nivel

IdCat, Cat,idPadre,nivel
1,Lapiz,0,1
2,HijoLapiz,1,2
3,NietoLapiz,2,3

Con ese dato adicional se puede solucionar construyendo una query distinta en cada caso. Yo lo haria con programación externa, que no seria objeto de este foro....

A partir del nivel de la categoria buscada y del maximo nivel posible es facil montar un bucle que construya la query adecuada....


En este caso el nivel de lapiz es 1 y el maximo nivel es 3

Código MySQL:
Ver original
  1. SELECT .....
  2. FROM....
  3. WHERE ID_CATEGORIA = 1 <----Padre Nivel 1
  4.     OR ID_CATEGORIA IN (SELECT id FROM categorias WHERE ID_Padre=1) <---Hijas Nivel 2
  5.     OR ID_CATEGORIA IN (SELECT id FROM categorias WHERE id_Padre IN
  6.                             (SELECT id FROM categorias WHERE ID_Padre=1)) <---Nietas Nivel 3 (Max)

Para HijoLapiz nivel 2

Código MySQL:
Ver original
  1. SELECT .....
  2. FROM....
  3. WHERE ID_CATEGORIA = 2 <----Padre Nivel 2
  4.     OR ID_CATEGORIA IN (SELECT id FROM categorias WHERE ID_Padre=2) <---Hijas Nivel 3 (Max)


Yo siempre lo he solucionado asi, pero estaré atento a soluciones mas directas....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 01/11/2012, 14:06
Avatar de ilen  
Fecha de Ingreso: febrero-2009
Mensajes: 125
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Consulta categoria recurrentes

Hola quimfv, me parece bien... 1 dato adicional es que no va pasar de 4 subniveles... como seria el query en caso que se elija la categoria ID=1 y que muestre sus 4 subniveles ??


Código MySQL:
Ver original
  1. Select....
  #6 (permalink)  
Antiguo 02/11/2012, 07:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta categoria recurrentes

Te he dado elementos suficientes....

Código MySQL:
Ver original
  1. SELECT .....
  2. FROM....
  3. WHERE ID_CATEGORIA = 1 <----Padre Nivel 1
  4.     OR ID_CATEGORIA IN (SELECT id FROM categorias WHERE ID_Padre=1) <---Hijas Nivel 2
  5.     OR ID_CATEGORIA IN (SELECT id FROM categorias WHERE id_Padre IN
  6.                             (SELECT id FROM categorias WHERE ID_Padre=1)) <---Nietas Nivel 3
  7.     OR ID_CATEGORIA IN (SELECT id FROM categorias WHERE id_Padre IN
  8.                                              (SELECT id FROM categorias WHERE id_Padre IN
  9.                                                    (SELECT id FROM categorias WHERE ID_Padre=1))) <---Biznietas Nivel 4 (Max)

Ojo eso se debe aplicar a una categoria padre si lo aplicas a una biznieta será muy ineficiente.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 09/11/2012, 00:29
Avatar de ilen  
Fecha de Ingreso: febrero-2009
Mensajes: 125
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Consulta categoria recurrentes

Gracias quimfv me funciona perfecto, me podrían ayudar ayudar en otra cosita haciendo que en 1 solo query me lista por ejemplo tengo un ID = 7 que a su vez pertenece al ID =5 y este pertenece al ID=1

tiene que mostrarse 3 registros de esta manera para listalo y me quede una navegacion asi

computadora(1) -> equipo(5) -> monitores(7)

es decir el query para saber los padre de una categoria hasta llegar a su maximo padre (solo 4 niveles) y asi poder hacer la navegacion, alguien me puede ayudar ???
  #8 (permalink)  
Antiguo 09/11/2012, 02:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta categoria recurrentes

Código MySQL:
Ver original
  1. SELECT sbc.ID_CATEGORIA
  2. FROM (SELECT categorias.ID_CATEGORIA
  3.            FROM categorias
  4.            WHERE categorias.ID_CATEGORIA=7
  5.     UNION ALL
  6.           SELECT categorias.ID_CATEGORIA
  7.           FROM categorias
  8.           WHERE categorias.ID_CATEGORIA=
  9.                      (SELECT categorias.ID_Padre
  10.                       FROM categorias
  11.                       WHERE categorias.ID_CATEGORIA=7)
  12.      UNION ALL
  13.         SELECT categorias.ID_CATEGORIA
  14.         FROM categorias
  15.         WHERE categorias.ID_CATEGORIA=
  16.                       (SELECT categorias.ID_Padre
  17.                        FROM categorias
  18.                        WHERE categorias.ID_CATEGORIA=
  19.                                 (SELECT categorias.ID_Padre
  20.                                  FROM categorias
  21.                                  WHERE categorias.ID_CATEGORIA=7))
  22.     UNION ALL
  23.          SELECT categorias.cat
  24.          FROM categorias
  25.          WHERE categorias.ID_CATEGORIA=
  26.                      (SELECT categorias.ID_Padre
  27.                       FROM categorias
  28.                       WHERE categorias.ID_CATEGORIA=
  29.                              (SELECT categorias.ID_Padre
  30.                               FROM categorias
  31.                               WHERE categorias.ID_CATEGORIA=
  32.                                      (SELECT categorias.ID_Padre
  33.                                       FROM categorias
  34.                                       WHERE categorias.ID_CATEGORIA=7)))) sbc
  35. order by sbc.ID_CATEGORIA

Cambia 7 por cualquier categoria, quizas se pueda optimizar pero te lo dejo a ti.... esto es para aprender no para que te hagan el trabajo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 09/11/2012, 03:00
Avatar de ilen  
Fecha de Ingreso: febrero-2009
Mensajes: 125
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Consulta categoria recurrentes

Wao quimfv funciona perfecto..!! gracias.

Etiquetas: select, tabla, campos, categorias
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 18:57.