sql >> Base de Datos >  >> RDS >> Mysql

MySQL cuenta todos los niños sin importar cuántos haya

(Existen numerosos enfoques para bucles/consultas anidadas... una idea de cambio de estructura sería tener una tabla separada que enumere todos los elementos secundarios de cada categoría... y asegurarse de que no solo tenga los elementos secundarios inmediatos, sino que también tenga el sub -hijos y sub-sub-hijos... como 1 tiene hijo 2, 2 tiene hijo 3, 1 tiene hijo 3, 3 tiene hijo 5, 1 tiene hijo 5... etc.) PERO, para la situación actual...

Una estructura de bucle podría ser:

Iniciar conjunto de resultados. ||Consulta de todos los ID de categoría donde principal =0. || Agregue cada uno a la matriz (X). ||Cerrar conjunto de resultados.

Para cada id en la matriz (X):

  • Establecer una nueva variable de conteo (z).
  • Establecer una nueva matriz de ID de niño (Y).

  • Iniciar conjunto de resultados. ||Recuento de consultas * para todos los elementos con categoría =id actual x ||Agregar a la variable de conteo (z) ||Cerrar conjunto de resultados.

  • Iniciar conjunto de resultados. ||Consulta de todas las identificaciones de categoría donde padre =identificación actual x ||Agregue todo a la matriz de identificación secundaria (Y). ||Cerrar conjunto de resultados.

  • while arreglo hijo (Y) longitud> 0

    • id de categoría y =primer elemento de la matriz (Y)

    • Iniciar conjunto de resultados. ||Consulta de todos los ID de categoría donde padre =ID actual y. ||Agregue todo a la matriz de identificación del niño (Y). ||Cerrar conjunto de resultados.

    • Iniciar conjunto de resultados. ||Recuento de consultas * para todos los elementos con categoría =id actual y ||Agregar a la variable de conteo (z) ||Cerrar conjunto de resultados.

    • eliminar el primer elemento de la matriz (Y)

  • continuar mientras bucle

  • En este punto, tiene el recuento final de elementos (z) para la categoría id x... haga algo con él, luego continúe con el bucle for

Fin del ciclo