Een nested list uit de database trekken?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeroen G

Jeroen G

28/05/2009 17:25:00
Quote Anchor link
Ik weet niet zo goed hoe ik dit het beste in PHP voor elkaar krijg. Een foreach loopje door de records binnen een foreach door de types gaat het wellicht doen. Maar kan dat niet veel efficienter?Ik dacht dat zoiets een 'nested list' heet, maar kan er bijn niets over vinden.

Ik heb het volgende (http://dev.mysql.com/tech-resources/articles/hierarchical-data.html) al doorgelezen. Het was zeer leerzaam, maar niet wat ik nodig heb,

- Is de onderstaande query de beste aanpak? Kan dit beter?
- Hoe kan ik in PHP het beste (kwa performance) de onderstaande output bereiken?

Mijn query
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    clubs.id as clubid,
    clubs.name as clubname,
    club_types.name as clubtype
FROM
    clubs
INNER JOIN
    club_types
ON
    club_types.id = clubs.club_type_id
GROUP BY
    clubtype


Query resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
clubid | clubname | clubtype
----------------------------
1 | naam1 | type1
2 | naam2 | type1
3 | naam3 | type1
4 | naam4 | type2
5 | naam5 | type2
6 | naam6 | type3
7 | naam7 | type3
8 | naam8 | type3
9 | naam9 | type3

Gewenste output (php)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
type 1 (type1 count)
 - naam1
 - naam2
 - naam3
type 2 (type2 count)
 - naam4
 - naam5
type3 (type3 count)
 - naam6
 - naam7
 - naam8
 - naam9
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 
PHP hulp

PHP hulp

22/11/2024 18:52:09
 

28/05/2009 18:27:00
Quote Anchor link
Misschien zoiets als dit?
 
Jeroen G

Jeroen G

28/05/2009 18:38:00
Quote Anchor link
@karl

dat omschrijft hetzelfde (multi-level, zonder joins) als de link die ik opgaf in mijn post.. Ik zal eens de code goed gaan lezen, mischien zijn er wel wat dingen uit te halen. Mijn probleemstelling is dus iets anders voor zover ik nu kan zien.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 
Hipska BE

Hipska BE

28/05/2009 19:54:00
Quote Anchor link
In je while lus waar je de data vanuit je DB haalt kun je dit doen om je data ongeveer te plaatsen zoals jij hier net beschreef:

$clubs[$row['clubtype']][] = $row['clubnaam'];

daarna doe je meer eens var_dump($clubs); om te zien wat er nu uit is gekomen..
 
Emmanuel Delay

Emmanuel Delay

29/05/2009 18:53:00
Quote Anchor link
Wat ook zeer interessant is: http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Waarschijnlijk is het wel net iets te veel moeite om voor zo'n simpele toepassing helemaal te bestuderen.
 

29/05/2009 18:54:00
Quote Anchor link
Emmanuel Delay schreef op 29.05.2009 18:53:

Lees eens z'n begin post.
 
Emmanuel Delay

Emmanuel Delay

29/05/2009 18:59:00
Quote Anchor link
ah ja.
 
Jeroen

Jeroen

29/05/2009 21:00:00
Quote Anchor link
Ik begrijp iets niet....

hoe kan dit op mijn naam staan, terwijl ik gisteren de hele dag niet thuis was????
 
Emmanuel Delay

Emmanuel Delay

29/05/2009 21:10:00
Quote Anchor link
Dat zijn twee verschillende loogins
 
Jeroen

Jeroen

29/05/2009 21:14:00
Quote Anchor link
Heh, grappig.
 
Jeroen G

Jeroen G

30/05/2009 15:01:00
Quote Anchor link
Ik heet toevallig ook Jeroen (zijn er nog wel meer ;)).

Iemand trouwens al een suggestie voor deze probleemstelling?
 
Noppes

Noppes

30/05/2009 15:12:00
Quote Anchor link
Die GROUP BY hoort er in ieder geval niet in thuis!

"Iemand trouwens al een suggestie voor deze probleemstelling?"
Welk Probleem - muz van het foutieve gebruikt van GROUP BY in de query -?

- Is de onderstaande query de beste aanpak? Kan dit beter?
Dan moet je wel een correcte query schrijven, zonder group by die het resultaat zodanig teruggeeft dat het met 1 if in de while loop kan komen tot de gewenste output
- Hoe kan ik in PHP het beste (kwa performance) de onderstaande output bereiken?
Dat is geheel afhankelijk van de query
 
Hipska BE

Hipska BE

30/05/2009 15:18:00
Quote Anchor link
Jeroen schreef op 30.05.2009 15:01:
Iemand trouwens al een suggestie voor deze probleemstelling?

Toevallig die van mij al es geprobeert?
 
Noppes

Noppes

30/05/2009 15:37:00
Quote Anchor link
Dat is een niet performace gerichte oplossing.
 
Jeroen G

Jeroen G

30/05/2009 15:54:00
Quote Anchor link
Quote:
het foutieve gebruikt van GROUP BY in de query

Wat is er precies foutief aan? Waarom hoort ie er niet thuis?

Quote:
Welk Probleem?

Wat snap je niet aan mijn vraag?

Quote:
Dat is geheel afhankelijk van de query

Tja.. dat is duidelijk.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 
Noppes

Noppes

30/05/2009 16:44:00
Quote Anchor link
Wat is er precies foutief aan? Waarom hoort ie er niet thuis?
in feite behoor je dat al te weten, want dat hoort bij de basiskennis

GROUP BY komt alleen om de hoek kijken indien er aggregate functions gebruikt worden.

"Wat snap je niet aan mijn vraag?"
Wel ik snap zo ie zo al niet waarom je hiervoor een topic aanmaakt, het enige problemen welke je hebt:
1. basiskennis SQL is te laag
2. je zelf blijkbaar geen zin hebt om er verder over na te denken dan noodszakelijk is.
 
Jeroen G

Jeroen G

30/05/2009 16:59:00
Quote Anchor link
@Noppes

tjonge was doe je onaardig. Als je niet wil reageren is dat niet nodig hoor.

1) Als je goed gelezen had zag je dat ik in mijn output (type1 count) heb staan.. Dit is een aggregate functie, en dus is group by wel nodig (welliswaar niet bij die specifieke query, maar wel bij de 'te maken' query.

2) Dat mijn basiskennis MySQL te laag is kan kloppen. Dat is één van de redenen waarom ik op deze site kom. Verder is het toch niet verboden om een topic te starten als je iets niet weet.. Sterker nog, dat is de reden om een topic te starten.

3) Waarop maak je uit dat ik geen zin heb om er over na te denken? Ik vind het juist leuk om hier over na te denken. Ik vraag geen kant-en-klaar stukje code. Ik wil een begrip krijgen van de werking van zo'n type opzet. Ook heb ik aangegeven in mijn topic wat ik al gelezen had om het probleem proberen op te lossen.

Jij snapt mischien niet waarom ik hier een topic voor aanmaak. Ik snap niet waarom jij uberhaubt een reactie geeft.

@Hipska

ja zo werkt het inderdaad,, Alleen daarmee kom ik in de knoop met mijn MVC opzet..
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 
Noppes

Noppes

30/05/2009 20:34:00
Quote Anchor link
Je moet geen topic's openen waarop aannames van toepassing zijn!

En een 2de query - voor de count - is nergens voor nodig, je kan het af met 1 query

Voor de rest is het een feit dat je je probleem - ookal is het niet het probleem welke jij denkt dat je aanhaalt - oplost als je leert logisch vooruit te denken.

Daar laat ik het maar bij...
 
Jeroen G

Jeroen G

30/05/2009 22:02:00
Quote Anchor link
Quote:
Je moet geen topic's openen waarop aannames van toepassing zijn!

Waarom niet? Je kan de kern van een probleem toch wel beantwoorden? Met jou houding zou je eerst aan iedereen vragen moeten gaan stellen als "Staat je PC al aan?", "Heb je de browser wel opgestart?", "Sla je het bestand wel op?"..

Quote:
En een 2de query - voor de count - is nergens voor nodig, je kan het af met 1 query

Waar zie je mij dat zeggen?

Quote:
Voor de rest is het een feit dat je je probleem - ookal is het niet het probleem welke jij denkt dat je aanhaalt - oplost als je leert logisch vooruit te denken.

euhm... Daar kan ik geen chocolade van maken.

Waarschijnlijk moet je mijn vraag nog eens lezen, dan snap je wellicht ook wat ik bedoel.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen G
 



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.