Mysql
 sql >> Base de données >  >> RDS >> Mysql

Relation parent - enfant au sein d'une même table

Puisque vous avez 4 niveaux finis, vous ne devriez pas avoir besoin de récursivité (bien qu'il soit pratique de pouvoir utiliser par exemple des CTE MS SQL).

Quelque chose comme :

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.

Si vous avez besoin de le faire pour plusieurs nœuds, vous devez le joindre à quelque chose qui sélectionne vos nœuds de départ, ou par exemple remplacer le WHERE t4.uid = '10007' ci-dessus la clause doit être WHERE t4.uid IN (SELECT DISTINCT uid FROM your_table_name)

Cela a été fait à main levée, donc désolé pour les fautes de frappe.