Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Relacionamento pai - filho em uma única tabela


Como você tem 4 níveis finitos, não precisa de recursão (embora seja útil poder usar, por exemplo, CTEs MS SQL).

Algo como:
SELECT
  t4.uid as child, 
  --t3.uid as parent,
  --t2.uid as grand_parent,
  --t1.uid as great_grand_parent,
  t1.parentid as great_great_grand_parent
FROM
  your_table_name t1

  inner join your_table_name t2
  on t2.parentid = t1.uid

  inner join your_table_name t3
  on t3.parentid = t2.uid

  inner join your_table_name t4
  on t4.parentid = t3.uin

where 
  t4.uid = '10007' -- your start node.

Se você precisar fazer isso para vários nós, precisará juntar isso a algo que selecione seus nós iniciais ou, por exemplo, substitua o WHERE t4.uid = '10007' acima cláusula seja WHERE t4.uid IN (SELECT DISTINCT uid FROM your_table_name)

Isso foi feito à mão livre, então desculpe pelos erros de digitação.