en cuanto a la primera consulta:
SELECT B1.*,CONCAT(COALESCE((SELECT B2.`Codi` FROM `categorias` B2 WHERE B2.`Id`=B1.`IdCo`),B1.`Codi`),IF(B1.`IdCo` IS NULL,'',B1.`Codi`))`Orde` FROM `categorias` B1 ORDER BY `Orde` ASC
y me arroja la tabla como quiero, pues ordena segun la fila order que es esta:
Código HTML:
[B]Orde*[/B]
ACC
HOM
HOMBIL
HOMCAL
HOMCIN
HOMLLA
MUJ
MUJMCAL
y para buscar el valor anterior:
SELECT B1.*,CONCAT(COALESCE((SELECT B2.`Codi` FROM `categorias` B2 WHERE B2.`Id`=B1.`IdCo`),B1.`Codi`),IF(B1.`IdCo` IS NULL,'',B1.`Codi`))`Orde` FROM `categorias` B1 HAVING `Orde`<'HOMCIN' ORDER BY `Orde` DESC LIMIT 1
sera que hay otra forma mas sencilla de hacerlo ???