sql >> Database >  >> RDS >> Mysql

MySQL telt alle kinderen, ongeacht hoeveel er zijn

(Er zijn talloze benaderingen voor geneste lussen/query's.. een idee van structuurverandering zou zijn om een ​​aparte tabel te hebben met alle kinderen van elke categorie... en ervoor te zorgen dat deze niet alleen de directe kinderen heeft, maar ook de sub -kinderen en sub-sub-kinderen... zoals 1 heeft kind 2, 2 heeft kind 3, 1 heeft kind 3, 3 heeft kind 5, 1 heeft kind 5.. etc..) MAAR, voor de huidige situatie..

Een lusstructuur zou kunnen zijn:

Resultatenset starten. ||Query voor alle categorie-ID's waarbij parent =0. || Voeg elk toe aan array (X). ||Sluit resultatenset.

Voor elke id in array (X):

  • Stel een nieuwe telvariabele (z) in.
  • Stel een nieuwe onderliggende ID-array (Y) in.

  • Resultatenset starten. ||Query count * voor alle items met categorie =huidige id x ||Toevoegen aan telvariabele (z) ||Resultatenset sluiten.

  • Resultatenset starten. ||Query voor alle categorie-id's waarbij parent =huidige id x ||Alles toevoegen aan onderliggende id-array (Y). ||Sluit resultatenset.

  • while child-array (Y) lengte> 0

    • categorie-ID y =eerste item in array (Y)

    • Resultatenset starten. ||Query voor alle categorie-ID's waarbij parent =huidig ​​ID y. ||Voeg alles toe aan de onderliggende ID-array (Y). ||Sluit resultatenset.

    • Resultatenset starten. ||Query count * voor alle items met categorie =huidig ​​id y ||Toevoegen aan telvariabele (z) ||Resultatenset sluiten.

    • verwijder eerste item uit array (Y)

  • doorgaan while-lus

  • Op dit punt heb je het laatste aantal items (z) voor categorie id x... doe er iets mee en ga dan verder met de for-lus

Einde voor lus




  1. Berekening van het aantal volledige maanden tussen twee datums in SQL

  2. Verbinding maken met een mySQL-database via asp.net

  3. UPDATE met SELECT, zal het elke rij of alle GESELECTEERDE records vergrendelen?

  4. Een query uitvoeren met een join over twee databases met PDO