Siento haberte hecho perder el tiempo.... pensaba que lo tenia solucionado solo con un
order by pero veo que no.
Yo uso una query ordenada como sigue
y apartir de ella con programación externa obengo el orden que pedias.
La programación externa es off topic en este foro... pero espero que explicar la estrategia seguida no lo sea....
Vamos a crear un ArrayDef con el orden buscado
Código pre:
Ver originalArrayDef = array() fuera del bucle
Inicio Bucle sobre los registros en el orden anterior
Declaro ArrayBefore y ArrayAfter
Si RegistroActual.padre=0
inserto RegistroActual en la última posición del ArrayDef
Si RegistroActual.padre<>0
Inicio bucle sobre ArrayDef
leo ArrayDef hasta encontrar al padre y/o un hermano de orden inferior
los guardo en ArrayBefore,
luego sigo leyendo ArrayDef hasta el final
los guardo en ArrayAfter
loop
Redeclaro ArrayDef=array() (se queda vacia)
Inserto en ArrayDef
ArrayBefore, RegistroActual, ArrayAfter
fin si
loop
Padre es cero cuando no hay un progenitor....