MySQL pour obtenir la profondeur de l'enregistrement, parent de compte et ancêtres dossiers

StackOverflow https://stackoverflow.com/questions/2824033

  •  26-09-2019
  •  | 
  •  

Question

Dire que j'ai une table contenant les champs après post_id et parent_post_id. Je veux retourner chaque enregistrement de la table poste avec un compte de la « profondeur » du poste. En profondeur, je veux dire, combien existent parents et ancêtres dossiers.

Prenez ces données par exemple ...

post_id   parent_post_id
-------   --------------
1         null
2         1
3         1
4         2
5         4

Les données représente cette hiérarchie ...

1
|_ 2
|  |_ 4
|     |_ 5
|_ 3

Le résultat de la requête doit être ...

post_id   depth
-------   -----
1         0
2         1
3         1
4         2
5         3

Merci à l'avance!

Était-ce utile?

La solution

Si vous faites beaucoup de questions comme celle-ci, vous pouvez trouver qu'un modèle de jeu imbriqué est plus approprié que la liste de contiguïté vous poser des questions sur. Il y a une bonne discussion sur les deux modèles .

En tout état de cause, de faire ce que vous demandez une liste de contiguïté que vous regardez soit récursion dans la couche d'application, ou le stockage de niveau comme une 3ème colonne.

ETA: si votre compte de niveau n'est pas très élevé, vous pouvez le faire avec auto-jointures:

par exemple. des noeuds ancêtres à 2:

SELECT t1.node 
FROM mytable AS t1
JOIN mytable AS t2 ON t1.parent = t2.node
JOIN mytable AS t3 ON t2.parent = t3.node
WHERE t3.parent IS NULL;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top