Ver Mensaje Individual
  #7 (permalink)  
Antiguo 03/07/2013, 05:30
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 2 meses
Puntos: 574
Respuesta: Generacion de Menu con campos de BBDD Mysql

Ya te he puesto la tabla

idItem,Item,idItemPadre,nivel,orden,accion
1, Perro, Null,0,1,Null
2,Jack Russel,1,1,abrir('Jack Russel')
3,Caniche,2,2,abrir('Caniche')
4,Pastor Aleman,1,3,abrir('Pastor Aleman')
5,Gato,Null,0,2,Null
6,Abisinio,5,1,1,abrir('Abisinio')
7,American Curl,5,1,2,abrir('American Curl')
8,Burmés,5,1,3,abrir('Burmés')

el contenido de accion es un ejemplo tonto es para poner algo

Ahora necesitas una query que retorne los items en ese orden, no vale ORDER BY idItem por razones obvias....

Código MySQL:
Ver original
  1. SELECT itm1.*,itm2.*
  2. FROM TblItemsMenu itm1 LEFT JOIN TblItemsMenu itm2
  3.        ON itm1.idItem=itm2.idItemPadre
  4. ORDER BY if(itm2.orden is null,0,1),itm2.orden,....itm2.nivel,itm1.nivel....,itm1.orden...

El join consigo misma nos proporciona cada item emparejado con los datos de su padre, si tiene. Luego hay que jugar con ORDER BY para conseguir el orden, no tengo aquí la solución. (Recuerda que un campo null se ordena al final de la lista con if(itm2.orden is null,0,1) invertimos esa logica).

Si solo tienes dos niveles, padres e hijos, la cosa se simplifica pero se puede conseguir una query que ordene bien para un numero indefinido de niveles.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 03/07/2013 a las 05:47