Subqueries om recursief te werk te gaan?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gerard Nijboer

Gerard Nijboer

29/05/2010 15:17:17
Quote Anchor link
Hallo!

Op mijn blog op http://alphabase.nl/?p=blog_cat heb ik op zeer eenvoudige wijze een blog gemaakt die aan de hand van categories en parents in categorieën is verdeeld.
Nu kan ik vanuit de huidige categorie wel testen hoeveel subcats mijn subcats hebben en hoeveel items mijn subcats hebben. Maar eigenlijk wil ik erachter ook tussen haakjes zetten hoeveel subcats en items mijn subcats in totaal hebben.
Dan ziet het er bijvoorbeeld als volgt uit:

- Category 1 - 3 cats (4 total) - 2 items (6 total)
- Category 2 - 1 cats (8 total) - 0 items (32 total)

Zo weet je dat een categorie die geen items direct bevat, in zijn subcats daarna misschien wel interessante info heeft.
Het lijkt me echter niet zo zeer effectief om via php een loop te maken die constant queries uitvoert, want bij een groeiende blog worden het dan aanzienlijk veel queries die moeten worden uitgevoerd.
Hoe kan ik dit probleem tackelen?
Alvast bedankt!

Gerard
 
PHP hulp

PHP hulp

22/12/2024 07:59:00
 
Joren de Wit

Joren de Wit

29/05/2010 15:25:05
Quote Anchor link
Ik vermoed dat dit je niet in 1 query gaat lukken. In het ene geval vraag je namelijk informatie op van afzonderlijke (sub)categorieën en in het andere geval wil je juist gegeven over de hele groep weten. Je zult hier dus wel een aparte query voor op moeten stellen met daarin waarschijnlijk een COUNT() en een GROUP BY op hoofdcategorie om de totalen te bepalen.
 
Pim -

Pim -

29/05/2010 17:10:33
 
Richard van Velzen

Richard van Velzen

29/05/2010 17:18:19
Quote Anchor link
In PostgreSQL kun je vanaf 8.4 recursieve CTE's gebruiken maar dit draait natuurlijk op MySQL.

De makkelijkste manier is al je categorien plus aantal (in die categorie) ophalen en in PHP dit recursief weer naar de parent toe laten lopen.

Wat ook nog kan en wat altijd efficienter is dan dit in PHP met loopjes doen is een stored function maken die wel steeds queries draait. Omdat dit binnen de database blijft heb je 0.1 overhead.
 
Andreas Warnaar

Andreas Warnaar

29/05/2010 17:48:49
Quote Anchor link
@Pim
Nested set model is in dit geval wel een oplossing, maar het gebruik van dit model is een heel andere aanpak kan het convetionele model.

Een erg populaire uitleg over nested set en MySql staat op de MySql site zelf. :
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Een nadeel van het model is dat je een linker en rechter waarden hebt, het is niet mogelijk om zomaar een record er tussen uit te halen zonder dat je "Tree" geheel wijzigd.

 
Pim -

Pim -

29/05/2010 18:01:12
Quote Anchor link
Ze hebben het in pagina 3 over een mogelijkheid items toe te voegen, is er dan niets te verzinnen om items ook weer weg te halen?
En zelfs als dat niet kan, is dat niet zo'n probleem. Hoe vaak verwijder je nou een groep vergeleken met hoe vaak je een tree opvraagt?
 
Tom Beuckelaere

Tom Beuckelaere

29/05/2010 19:47:46
Quote Anchor link
Pim:
Ze hebben het in pagina 3 over een mogelijkheid items toe te voegen, is er dan niets te verzinnen om items ook weer weg te halen?
En zelfs als dat niet kan, is dat niet zo'n probleem. Hoe vaak verwijder je nou een groep vergeleken met hoe vaak je een tree opvraagt?


Het is zeker mogelijk om een item of een groep opnieuw te verwijderen. Je baseert je op de grenswaarden (links en rechts) om één item weg te halen.

Wanneer je een groep wenst weg te halen dan verhoog je de linker- en/of rechtergrenzen.
Het enige waar je rekening mee zult moeten houden is denk ik dat je een of meerdere grenzen van bestaande waarden zou moeten aanpassen.

Echter ben ik daar ook even het spoor bijster. Ik ben mij bekend met dit model maar ik heb ze nooit concreet toegepast. Ik ben echter zeker dat hier ergens nog wel een lid schuilt die een beter antwoord kan geven, dan ik.
Gewijzigd op 29/05/2010 19:48:11 door Tom Beuckelaere
 
Pim -

Pim -

29/05/2010 20:07:48
Quote Anchor link
Lijkt gemakkelijk toch? Gewoon de kant en klare functies in een data mapper oid gooien en je bent klaar.

Kant en klaar:
http://bakery.cakephp.org/articles/view/modified-preorder-tree-traversal-component
 
Richard van Velzen

Richard van Velzen

29/05/2010 20:59:42
Quote Anchor link
Premodified trees zijn overbodig, zoals ik al zei. Deze functionaliteit is doodeenvoudig in de database zelf te implementeren middels stored functions.
 



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.