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

MySQL conta todos os filhos, não importa quantos existam


(Existem várias abordagens para loops/consultas aninhadas.. uma ideia de mudança de estrutura seria ter uma tabela separada que listasse todos os filhos de cada categoria. -filhos e sub-sub-filhos... como 1 tem filho 2, 2 tem filho 3, 1 tem filho 3, 3 tem filho 5, 1 tem filho 5.. etc.) MAS, para a situação atual..

Uma estrutura de loop pode ser:

Iniciar conjunto de resultados. ||Consulta para todos os IDs de categoria em que pai =0. || Adicione cada um ao array (X). ||Fechar conjunto de resultados.

Para cada id na matriz (X):
  • Estabeleça uma nova variável de contagem (z).

  • Estabeleça uma nova matriz de ID filho (Y).

  • Iniciar conjunto de resultados. ||Contagem de consultas * para todos os itens com categoria =id atual x ||Adicionar à variável de contagem (z) ||Fechar conjunto de resultados.

  • Iniciar conjunto de resultados. ||Consulta para todos os IDs de categoria em que pai =ID atual x ||Adicionar tudo ao array de ID filho (Y). ||Fechar conjunto de resultados.

  • while array filho (Y) comprimento> 0

    • id de categoria y =primeiro item na matriz (Y)

    • Iniciar conjunto de resultados. ||Consulta para todos os ids de categoria onde pai =id atual y. ||Adicione tudo ao array de ID filho (Y). ||Fechar conjunto de resultados.

    • Iniciar conjunto de resultados. ||Contagem de consultas * para todos os itens com categoria =id atual y ||Adicionar à variável de contagem (z) ||Fechar conjunto de resultados.

    • remover o primeiro item da matriz (Y)

  • continuar enquanto loop

  • Neste ponto, você tem a contagem final de itens (z) para o ID da categoria x... faça algo com isso e continue com o loop for

Fim para loop