Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL zählt alle Kinder, egal wie viele es sind

(Es gibt zahlreiche Ansätze für verschachtelte Schleifen / Abfragen. Eine Idee zur Strukturänderung wäre, eine separate Tabelle zu haben, die alle untergeordneten Elemente jeder Kategorie auflistet -Kinder und Unter-Unter-Kinder... wie 1 hat Kind 2, 2 hat Kind 3, 1 hat Kind 3, 3 hat Kind 5, 1 hat Kind 5.. etc..) ABER, für die aktuelle Situation..

Eine Schleifenstruktur könnte sein:

Ergebnismenge starten. ||Suche nach allen Kategorie-IDs, bei denen Elternteil =0 ist. || Füge sie jeweils dem Array hinzu (X). ||Ergebnisliste schließen.

Für jede ID im Array (X):

  • Erstellen Sie eine neue Zählvariable (z).
  • Erstellen Sie ein neues untergeordnetes ID-Array (Y).

  • Ergebnismenge starten. ||Anzahl der Abfragen * für alle Elemente mit Kategorie =aktuelle ID x ||Zu Zählvariable hinzufügen (z) ||Ergebnisliste schließen.

  • Ergebnissatz starten. ||Suche nach allen Kategorie-IDs, wobei Elternteil =aktuelle ID x ||Füge alles zum untergeordneten ID-Array hinzu (Y). ||Ergebnisliste schließen.

  • während die Länge des untergeordneten Arrays (Y)> 0 ist

    • Kategorie-ID y =erstes Element im Array (Y)

    • Ergebnismenge starten. ||Suche nach allen Kategorie-IDs, wobei Elternteil =aktuelle ID y ist. ||Füge alles zum untergeordneten ID-Array hinzu (Y). ||Ergebnisliste schließen.

    • Ergebnissatz starten. ||Anzahl der Abfragen * für alle Elemente mit Kategorie =aktuelle ID j ||Zu Zählvariable hinzufügen (z) ||Ergebnisliste schließen.

    • Entfernen Sie das erste Element aus dem Array (Y)

  • While-Schleife fortsetzen

  • An diesem Punkt haben Sie die endgültige Elementanzahl (z) für die Kategorie-ID x ... tun Sie etwas damit und fahren Sie dann mit der for-Schleife fort

End for-Schleife