Ver Mensaje Individual
  #9 (permalink)  
Antiguo 25/01/2014, 19:25
Avatar de Djoaq
Djoaq
 
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Problema ordenando datos en query

Cita:
Iniciado por xcars Ver Mensaje
Saludos amigos, posiblemente sea algo sencillo, pero nose si sera que mi cabeza no computa pero no le he podido encontrar solucion, talvez me ayuden a encontrar una luz o una solucion.

Tengo una tabla de categorias que será recursiva para tener categorias padres e hijos, es decir, CATEGORIA_PADRE1 puede tener hijos y nietos. Por el momento, solo seran tres niveles, es decir padre,hijo,nieto pero queda la posibilidad de que sean mas niveles, aunque de eso me preocupo despues.
La tabla ademas tiene un campo de ordenacion interno, es decir, del padre1 como quiero que queden ordenados los hijos y de los hijos tambien puedo definir como quiero que queden ordenados los nietos.

El punto es que necesito hacer un query que obtenga el listado de categoria_id y categoria _nombre ordenado por padre, hijos, nietos en el orden del campo de ordenacion, ej:
Categoria Padre: Bienes y raices
hijo1: Compra y Venta (campo orden=1)
hijo2: Alquileres (campo orden=2)
hijo3: Otros (campo orden=3)

el hijo1 del hijo1: Casas (campo orden=1)
el hijo 2 del hijo1: Apartamentos (campo orden=2)
el hijo 3 del hijo1: otros en compra y venta(campo orden=3)

el hijo1 del hijo2: Casas (campo orden=1)
el hijo2 del hijo2: Apartamentos (campo orden=2)
el hijo3 del hijo2: Otros Alquileres(campo orden=3)

Y el resultado que busco del query ordenado seria:

Bienes y Raices
Compra y Venta
Casas
Apartamentos
Otros en compra y venta
Alquileres
Casas
Apartamentos
Otros Otros Alquileres
Otros (ojo este es el hijo3 del padre)

La estructura de la tabla es la siguiente:
Código MySQL:
Ver original
  1. CREATE TABLE `categorias` (
  2.     `categoria_id` INT(11) NOT NULL AUTO_INCREMENT,
  3.     `categoria_nombre` VARCHAR(75) NULL DEFAULT NULL,
  4.     `parent_id` INT(11) NULL DEFAULT NULL,
  5.     `categoria_descripcion` TEXT NULL,
  6.     `categoria_estado_id` ENUM('Activo','Inactivo') NULL DEFAULT NULL,
  7.     `categoria_precio` ENUM('Si','No') NULL DEFAULT 'Si',
  8.     `categoria_articulo` ENUM('Si','No') NULL DEFAULT 'Si',
  9.     `posicion_orden` TINYINT(4) NULL DEFAULT '1',
  10.     PRIMARY KEY (`categoria_id`),
  11.     INDEX `codigo_cat` (`categoria_id`)
  12. )

Y el query que tengo y que no funciona es
Código MySQL:
Ver original
  1. SELECT parent_id,categoria_id,categoria_nombre,posicion_orden FROM categorias ORDER BY parent_id ASC,posicion_orden

Alguien me podria dar una luz de como ordenar de esa manera o que podria hacer para lograr dicho resultado.

De antemano gracias por sus ayudas y aportes.
Buenas noches!! la verdad es que estoy muy espeso ya a estas horas!!

No se si he entendido bien lo que quieres , seria ordenar por una serie de registros? bueno yo en su día tuve un problema parecido ! entonces lo que hice fue esto :
Código MySQL:
Ver original
  1. SELECT MASTER_id_.*,
  2.     informecomer_.cif,
  3.     informecomer_.nombre_agencia,
  4.     informecomer_.fecha_fin,
  5.     informecomer_.tipo_serv,
  6.     CASE informecomer_.tipo_serv
  7.             WHEN "Microsites" THEN 1
  8.             WHEN "Pack Pro 5" THEN 2
  9.             WHEN "Pack Pro 10" THEN 3
  10.             WHEN "Pack Pro 20" THEN 4
  11.             WHEN "Pack Pro 50" THEN 5
  12.             WHEN "Pack Pro 100" THEN 6
  13.             WHEN "Pack Pro 200" THEN 7
  14.             WHEN "Pack pro -1" THEN 8
  15.                 ELSE "9"
  16.                     END AS "Contador",
  17.     informecomer_.id
  18.    
  19.    
  20.             FROM master_id_,informecomer_
  21.            
  22.                     WHERE master_id_.ID_BO = informecomer_.id
  23.                            
  24.                             ORDER BY contador ASC

Es solo para ver si te inspiro...

Yo diría que creo que lo que quieres hacer le pinta mas a una select que a un order by!

Saludo!