Aantallen van alle onderliggende records ophalen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert Wazzaa

Robert Wazzaa

01/06/2012 21:38:44
Quote Anchor link
Beste Iedereen,

Ik ben een website aan het maken waar ik een aantal getallen in wil berekenen.

De hoofdmodule waar het om gaat is een groepen module (tblGroepen). Groepen kunnen oneindig diep aan elkaar worden toegevoegd.
Groepen staan met elkaar gekoppeld doormiddel van een koppel veld.
Elk record heeft als ID veld Grp_ID.
Een gekoppeld record heeft het Grp_ID van de bovenliggende groep in het veld Grp_Grp_ID staan.

In elke groep kunnen aparte records worden toegevoegd in een andere tabel (tblFotos)
De foto's staan gekoppeld met het veld Fot_Grp_ID.

Het probleem waar ik nu tegen aan loop is dat ik bij de hoofdgroep wil tellen hoeveel foto's er binnen vallen.

Oftewel van elke subgroep binnen de hoofdgroep moet ik de foto's tellen.
Ik programmeer al wat jaren maar ik weet gewoon niks te bedenken hoe ik dit sql technisch in 1 query kan maken zonder in PHP te hoeven loopen.

Ik hoop dat iemand mij kan helpen een zetje in de goede richting te geven.

Alvast bedankt!

Gr. Robert
 
PHP hulp

PHP hulp

26/01/2020 22:46:08
 
G P

G P

01/06/2012 21:49:56
Quote Anchor link
Met een COUNT toe te voegen? => http://www.tizag.com/mysqlTutorial/mysqlcount.php
 
Robert Wazzaa

Robert Wazzaa

01/06/2012 21:52:54
Quote Anchor link
Beste Gunther,

Het is niet een questie van simpel een count toevoegen, was het maar zo makkelijk haha.

Het zit zegmaar zo:

Ik heb deze groepen structuur:
- Hoofdgroep 1
- - Subgroep 1
- - - Sub Subgroep 1
- - - Sub Subgroep 2
- - Subgroep 2
- - Subgroep 3
- - - Sub Subgroep 1
- - - Sub Subgroep 2
- - - Sub Subgroep 3
- - - - Sub Sub Subgroep 1

Nu wil ik voor Hoofdgroep 1 weten hoeveel foto's er in ALLE subgroepen en in ALLE sub subgroepen en in ALLE sub sub subgroepen zitten.

Ik hoop dat dit mijn vraag iets duidelijker maakt.

Gr. Robert
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/06/2012 15:57:20
Quote Anchor link
Zoals je nu je tabellen hebt opgebouwd gaat dit niet zonder het gebruik van SP's.
Ben ook benieuwd hoe je nu je volledige groep structuur ophaalt.
 
Marco ----

Marco ----

02/06/2012 16:11:07
Quote Anchor link
De complete tabellenstructuur met bijbehorende relaties is mij nog niet helemaal duidelijk. Als je database gewoon goed is moet dat kunnen met één SQL query.
 
Terence Hersbach

Terence Hersbach

02/06/2012 16:36:50
Quote Anchor link
Je kunt het best iets anders werken, met de zogenaamde NestedSet-structuur. Je geeft bij elke groep niet aan wat zijn parent is, maar geeft een coördinaat mee. Je moet 3 velden toevoegen: lft (links), rgt (rechts) en level.

Hier een klein voorbeeldje hoe je de groepen dan in kun delen. De rode cijfers zijn de lft en rgt waardes.
http://i48.tinypic.com/2upd3xf.jpg

Wil je bijvoorbeeld alle onderliggende groepen van subgroep 7 (lft = 14, rgt = 19), dan doe je een selectie op groepen met de lft hoger dan 14 en rgt lager dan 19.

Wil je de directe kinderen van de hoofdgroep (lft = 1, rgt = 20, level = 0), dan doe je een selectie op groepen met de lft hoger dan 1, rgt lager dan 20 en level = 1.

Het is even iets lastiger te begrijpen en te beheren, maar uiteindelijk kun je veel meer. Je kunt ook gewoonweg Doctrine gebruiken :)
Gewijzigd op 02/06/2012 16:37:47 door Terence Hersbach
 
Robert Wazzaa

Robert Wazzaa

02/06/2012 17:04:17
Quote Anchor link
Beste Terence,

Bedankt voor je reactie, ik ga dit even goed bekijken en kijken of ik het in kan bouwen.

Gr. Robert

Toevoeging op 02/06/2012 20:41:25:

Beste Terence,

Ik snap inmiddels het principe. Nu zit ik alleen nog met het probleem hoe ik die nummers bij de juiste groepen links en rechts ga zetten.

Zou je mij hier misschien ook mee willen helpen?

Gr. Robert
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/06/2012 10:08:39
Quote Anchor link
Robert,

Een tak zonder zijtakken heeft links en rechts opeenvolgende nummers.
Als een tak zijtakken heeft is links 1 lager dan de links van de eerste tak en rechts 1 hoger dan de rechts van de laaste tak, bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
Hoofdgroep 1 {1
2}
Hoofdgroep 2 {3
    Subgroep 2.1 {4
    5}
    Subgroep 2.2 {6
        Subgroep 2.2.1 {7
        8}
        Subgroep 2.2.2 {9
        10}
    11}
12}
Gewijzigd op 04/06/2012 10:09:12 door Ger van Steenderen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.