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

MySQL compte tous les enfants, peu importe leur nombre

(Il existe de nombreuses approches pour les boucles/requêtes imbriquées... une idée de changement de structure serait d'avoir une table séparée qui répertorie tous les enfants de chaque catégorie... et assurez-vous qu'elle n'a pas seulement les enfants immédiats, elle a aussi le sous -enfants et sous-sous-enfants... comme 1 a l'enfant 2, 2 a l'enfant 3, 1 a l'enfant 3, 3 a l'enfant 5, 1 a l'enfant 5.. etc..) MAIS, pour la situation actuelle..

Une structure de boucle pourrait être :

Démarrer le jeu de résultats. ||Requête pour tous les identifiants de catégorie où parent =0. || Ajoutez chacun au tableau (X). ||Fermer le jeu de résultats.

Pour chaque identifiant dans le tableau (X) :

  • Établir une nouvelle variable de comptage (z).
  • Établir un nouveau tableau d'ID enfant (Y).

  • Démarrer le jeu de résultats. ||Nombre de requêtes * pour tous les éléments avec la catégorie =identifiant actuel x ||Ajouter à la variable de comptage (z) ||Fermer le jeu de résultats.

  • Démarrer le jeu de résultats. ||Requête pour tous les identifiants de catégorie où parent =identifiant actuel x ||Ajouter tout au tableau d'identifiants enfants (Y). ||Fermer le jeu de résultats.

  • tandis que la longueur du tableau enfant (Y)> 0

    • identifiant de catégorie y =premier élément du tableau (Y)

    • Démarrer le jeu de résultats. ||Requête pour tous les identifiants de catégorie où parent =identifiant actuel y. ||Ajouter tout au tableau d'ID enfant (Y). ||Fermer le jeu de résultats.

    • Démarrer le jeu de résultats. ||Nombre de requêtes * pour tous les éléments avec la catégorie =identifiant actuel y ||Ajouter à la variable de comptage (z) ||Fermer le jeu de résultats.

    • supprimer le premier élément du tableau (Y)

  • continuer pendant la boucle

  • À ce stade, vous avez le nombre final d'éléments (z) pour l'identifiant de catégorie x... faites quelque chose avec, puis continuez avec la boucle for

Fin de la boucle