Acabo de dar con una SOLUCION!!!
Creo 2 campos "fantasma" que los uso para el orden.
El primero es idX que toma el valor de id siempre a menos que id_PADRE sea >0
Luego un campo textoX que contiene el texto de un select del idX
Con eso puedo ordenar por textoX y despues idX y despues por id_PADRE
al tener id_PADRE con -1 este queda siempre ARRIBA
Os pongo el codigo:
Código SQL:
Ver originalSELECT
*,
(CASE
WHEN id_PADRE < 1 THEN id
ELSE id_PADRE
END) idX,
(SELECT ppp.Texto FROM productos ppp WHERE ppp.id=idX) textoX
FROM productos p
ORDER BY
textoX DESC,
idX ASC,
p.id_PADRE ASC
o en orden inverso:
Código SQL:
Ver originalSELECT
*,
(CASE
WHEN id_PADRE < 1 THEN id
ELSE id_PADRE
END) idX,
(SELECT ppp.Texto FROM productos ppp WHERE ppp.id=idX) textoX
FROM productos p
ORDER BY
textoX ASC,
idX ASC,
p.id_PADRE ASC
[/CODE]
De esta forma puedo ordenar por TextoX de forma ascendente o descendente que id idPADRE = -1 (que es el padre de los hijos) esta por encima de los hijos, y estos a continuación.