Al enige tijd ben ik ermee aan het proberen, echter kan ik er niet uitkomen.
Versimpelde situatie is als volgt, voorbeeld met 3 tabellen:
facturen
- id
- factuurnummer
factuurdelen
- id
- omschrijving
factuurregels
- id
- bedrag
Om het samen te vatten zou ik zo efficiënt mogelijk deze gegevens inladen in PHP, zodat ik krijg:
array (id, factuurnummer, factuurdelen => array(
id, omschrijving, factuurregels => array(
array(id, bedrag),
array(id, bedrag)),
id, omschrijving, factuurregels => array(
array(id, bedrag),
array(id, bedrag),
array(id, bedrag)),
id, omschrijving, factuurregels => array(
array(id, bedrag),
array(id, bedrag))));
Op dit moment doe ik het met 3 query's. Dan haal ik eerst alle facturen op, per factuur haal ik de factuurdelen op, per factuurdeel haal ik de factuurregels op. Dat levert enorm veel query's op, en kost bijv. nu bij de giropost 2,5 minuut om te laden.
Sinds kort ken ik ook het idee van GROUP_CONCAT, en vooralsnog lijkt het veelbelovend. Als ik een query doe op de factuurdelen en dan de factuurregels in de GROUP_CONCAT laat ophalen, doet hij er slechts 3 seconden over inclusief exploden door PHP.
Echter ben ik nu al 2 dagen aan het spelen met de GROUP_CONCAT en GROUP BY, echter lukt het me niet om zonder dubbele gegevens e.d. de data uit de database te halen.
Als iemand me opweg kan helpen bovenstaande gegevens zo efficiënt mogelijk op te halen, zou dat heel fijn zijn.
---
Achtergrondinformatie
De meest efficiënte methode om gegevens op te halen wil ik gaan gebruiken in mijn zelfgemaakte entiteiten-systeem waarbij query's automatisch opgebouwd worden. Als bijv. de facturen opgehaald worden, en de onderstaande entiteiten ook nodig zijn, zou ik dat graag met één query allen ophalen. Ik hoop dan ook dat de SQL query simpel is.
Ik ben bekend met bijv. JOINS, echter lukt het me niet om de gegevens niet-dubbel te krijgen. Hiermee zorg ik bijv. op het moment dat het standaard adres (veel relaties hebben meerdere adresgegevens) opgehaald wordt, door een JOIN tussen relaties en adressen WHERE adres.soort=algemeen. Echter zou ik dat willen gaan vervangen door group_concat, want dan heb ik gelijk alles
.
Versimpelde situatie is als volgt, voorbeeld met 3 tabellen:
facturen
- id
- factuurnummer
factuurdelen
- id
- omschrijving
factuurregels
- id
- bedrag
Om het samen te vatten zou ik zo efficiënt mogelijk deze gegevens inladen in PHP, zodat ik krijg:
array (id, factuurnummer, factuurdelen => array(
id, omschrijving, factuurregels => array(
array(id, bedrag),
array(id, bedrag)),
id, omschrijving, factuurregels => array(
array(id, bedrag),
array(id, bedrag),
array(id, bedrag)),
id, omschrijving, factuurregels => array(
array(id, bedrag),
array(id, bedrag))));
Op dit moment doe ik het met 3 query's. Dan haal ik eerst alle facturen op, per factuur haal ik de factuurdelen op, per factuurdeel haal ik de factuurregels op. Dat levert enorm veel query's op, en kost bijv. nu bij de giropost 2,5 minuut om te laden.
Sinds kort ken ik ook het idee van GROUP_CONCAT, en vooralsnog lijkt het veelbelovend. Als ik een query doe op de factuurdelen en dan de factuurregels in de GROUP_CONCAT laat ophalen, doet hij er slechts 3 seconden over inclusief exploden door PHP.
Echter ben ik nu al 2 dagen aan het spelen met de GROUP_CONCAT en GROUP BY, echter lukt het me niet om zonder dubbele gegevens e.d. de data uit de database te halen.
Als iemand me opweg kan helpen bovenstaande gegevens zo efficiënt mogelijk op te halen, zou dat heel fijn zijn.
---
Achtergrondinformatie
De meest efficiënte methode om gegevens op te halen wil ik gaan gebruiken in mijn zelfgemaakte entiteiten-systeem waarbij query's automatisch opgebouwd worden. Als bijv. de facturen opgehaald worden, en de onderstaande entiteiten ook nodig zijn, zou ik dat graag met één query allen ophalen. Ik hoop dan ook dat de SQL query simpel is.
Ik ben bekend met bijv. JOINS, echter lukt het me niet om de gegevens niet-dubbel te krijgen. Hiermee zorg ik bijv. op het moment dat het standaard adres (veel relaties hebben meerdere adresgegevens) opgehaald wordt, door een JOIN tussen relaties en adressen WHERE adres.soort=algemeen. Echter zou ik dat willen gaan vervangen door group_concat, want dan heb ik gelijk alles

[Voor 6% gewijzigd door vmsw op 30-06-2011 02:22]