Guarda,

data una tabella Utenti (id, parent_id) potresti fare una query del genere:

codice:
with recursive my_users as(  
select id,parent_id,0 as level from UTENTI where id=XXX
union all
select p.id, p.parent_id,my_users.level+1 as level from UTENTI p, my_users where p.id = my_users.parent_id)
select * from my_users order by level asc;
dato l'utente con id XXX ti tira fuori l'utente con l'ID XXX e tutti i figli/nipoti/pronipoti/etc. In questo caso viene aggiunto come iterazione 0 quella di selezionare l'utente XXX e le successive iterazioni invece sono la ricorsione vera e propria. Altrimenti se non ti serve l'utente XXX, come iterazione 0 metti select id,parent_id,1 as level from UTENTI where parent_id = XXX. Ovviamente "level" è aggiunto per comodità giusto per poter ordinare la query per "livello".

Detto questo, questa query è per Postgresql ma dovrebbe funzionare così com'è con Mysql. Altrimenti fai un chcek sul manuale per il costrutto "with recursive" che mi pare sia implementato uguale (ho intravisto degli esempi in merito)