Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL conta tutti i bambini, non importa quanti ce ne siano

(Esistono numerosi approcci ai cicli / query nidificati.. un'idea di modifica della struttura sarebbe quella di avere una tabella separata che elenchi tutti i figli di ogni categoria.. e assicurarsi che non abbia solo i figli immediati, ma abbia anche il sub -figli e sub-sotto-figli... come 1 ha un figlio 2, 2 ha un figlio 3, 1 ha un figlio 3, 3 ha un figlio 5, 1 ha un figlio 5.. ecc.) MA, per la situazione attuale..

Una struttura ad anello potrebbe essere :

Avvia set di risultati. ||Query per tutti gli ID di categoria dove parent =0. || Aggiungi ciascuno all'array (X). ||Chiudi set di risultati.

Per ogni ID nell'array (X):

  • Stabilire una nuova variabile di conteggio (z).
  • Stabilisci un nuovo array di ID figlio (Y).

  • Avvia set di risultati. ||Conteggio query * per tutti gli elementi con categoria =ID corrente x ||Aggiungi alla variabile di conteggio (z) ||Chiudi set di risultati.

  • Avvia set di risultati. ||Richiesta per tutti gli ID di categoria dove genitore =ID corrente x ||Aggiungi tutto all'array di ID figlio (Y). ||Chiudi set di risultati.

  • mentre la lunghezza dell'array figlio (Y)> 0

    • ID categoria y =primo elemento nell'array (Y)

    • Avvia set di risultati. ||Query per tutti gli ID di categoria dove genitore =ID corrente y. ||Aggiungi tutto all'array di ID figlio (Y). ||Chiudi set di risultati.

    • Avvia set di risultati. ||Conteggio query * per tutti gli elementi con categoria =ID corrente y ||Aggiungi alla variabile di conteggio (z) ||Chiudi set di risultati.

    • rimuovi il primo elemento dall'array (Y)

  • continua durante il ciclo

  • A questo punto hai il conteggio finale degli elementi (z) per l'id della categoria x... fai qualcosa con esso, quindi continua con il ciclo for

Fine per ciclo