No se si te entendí muy bien pero lo que quieres hacer es que si la estructura es:
1 > 2 > 3 > 4 y quieres mostrar el 3 te muestre 1 > 2 > 3 o bien si quieres mostrar el 4 te muestre 1 > 2 > 3 > 4, es decir que si tienes digamos "3 categorías" y eliges la número 3, te cree como un árbol prácticamente desde la primer categoría hasta la que elegiste?
1
|+2
|++3
Sí es así y es por base de datos (mis ocurrencias son grandes pero funcionan) primero tendría que saber como estan ordenadas tus tablas para ver como haré la petición, bueno, según leí tienes un id y un parent para indicar, entonces una posible solución sería:
La función que tienes para obtener el "ID" y ya sea un bucle (digamos, si el parent o el ID esta por orden númerico) que mientras el $i < ID_categoria te tire las anteriores, asi que suponiendo que tenemos
1 = ID 1
2 = ID 2
3 = ID 3
Si elegimos la 3 seria $i = 0 ; $i < 3; $i++ entonces de esta manera obtendras todos los ID anteriores o parents (según te acomodes), ya solo sería cuestión de que los organizes en un array y los muestres.
Ahora, si solo te tira el último, puedes utilizar array_push() con el nuevo padre para asi agregarlo al final ya que pues dicha función va agregando valores al final de un array, pero bueno, alomejor al leer esto te da ideas, saludos.