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

ordernar parent_id

Estas en el tema de ordernar parent_id en el foro de Mysql en Foros del Web. hola gente, estoy armando una lista desplegables de categorias con la siguiente query: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT Concat ( If ( isnull ...
  #1 (permalink)  
Antiguo 07/05/2013, 13:17
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
ordernar parent_id

hola gente,
estoy armando una lista desplegables de categorias con la siguiente query:

Código MySQL:
Ver original
  1. SELECT Concat( If( isnull( p2.nombre ) , "", Concat( "/", p2.nombre ) ) , "/", p1.nombre ) AS nombre, p2.nombre AS Parent_name, p1.mano_id
  2. FROM mano_de_obra p1
  3. LEFT JOIN mano_de_obra p2 ON p1.parent_id = p2.mano_id
  4. ORDER BY p1.parent_id, nombre

que me devuelve esto:
Código:
 nombre 	Parent_name 	mano_id 	parent_id
/Electricidad 	NULL	4 	0
/Plomeria 	NULL	1 	0
/Plomeria/Cloacas 	Plomeria 	5 	1
/Plomeria/Plomeria de edificios 	Plomeria 	2 	1
/Plomeria de edificios/Plomeria centrifugada 	Plomeria de edificios 	3 	2
/Plomeria de edificios/Plomeria de Altura 	Plomeria de edificios 	6 	2
/Electricidad/Electricidad Industrial 	Electricidad 	7 	4
como veran electricidad / electricidad industrial no esta ordenado deberia salir en segundo lugar y no último.
Como puedo hacer para que salga todo ordenado alfabeticamente de esta forma por ejemplo
Código:
categoria
   categoria hija
        categoria nieta
             categoria bis nieta

categoria
   categoria hija
        categoria nieta

categoria
   categoria hija
        categoria nieta
             categoria bis nieta

categoria

categoria
   categoria hija
Desde ya muchas gracias!
  #2 (permalink)  
Antiguo 07/05/2013, 15:23
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: ordernar parent_id

Hola destor77:

Lamentablemente MySQL no maneja consultas recursivas por lo que hacer lo que quieres puede no resultar tan sencillo, primero habría que saber algunos detalles:

1. ¿La profundidad de tu árbol (es decir, cuantas ramas, y subramas puede tener) puede crecer indistintamente o tienes algún límite.?

2. ¿Tienes la posibilidad de hacer cambios a tu tabla o es una tabla que ya no puede sufrir modificaciones?

Este tipo de consultas por lo general las haces mediante un Procedimiento Almacenado o con programación, ya que hacerlas con un simple SELECT puede complicarse demasiado. Hay un artículo bastante completo acerca de manejo de consultas jerárquicas dale un vistazo para ver si te sirve algo:

http://artfulsoftware.com/mysqlbook/...qled1ch20.html

http://www.artfulsoftware.com/infotree/queries.php
(sección Graphs and Hierarchies)

Saludos
Leo.
  #3 (permalink)  
Antiguo 07/05/2013, 18:09
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: ordernar parent_id

hola,
1- La profundida puede crecer indistintamente, pero dudo que tenga mas de 3 o 4 ramas
2- Si se pueden hacer cambios, estoy en la fase beta del proyecto asi que se permiten cambios. La idea de esa tabla es guardar categorias de mano de obra (por eso los nombres) que tengan un precio, un descuento y un impuesto. O sea la tabla tiene 6 campos en total.

Veo que es algo complicado por ahi como tu dices me conviene hacerlo por php y armar una funcion recursiva que me arme el arreglo y despues pasarlo armado a la vista.

Etiquetas: join, select
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:07.