Is het mogelijk om in één query sommatie's te maken voor meervoudige zoekgegevens?
Ik ben met een query bezig te herschrijven. Deze werdt per discrete zoek criteria waarden uitgevoerd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dit dacht ik te vervangen door de Foreach te laten vervallen en het op te lossen met 'in'
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php ....
SELECT veld_x
,veld_y
,sum(veld_z) as veld_som
FROM table
WHERE JUR in ('Jur1', 'Jur2', 'Jur3')
AND BX in ('BU1', 'BU2', 'BU3', 'BU4')
AND Scene in (SCENE1, .... SCENE49)
GROUP BY veld_x
,veld_y
order by veld_x
,veld_y
?>
SELECT veld_x
,veld_y
,sum(veld_z) as veld_som
FROM table
WHERE JUR in ('Jur1', 'Jur2', 'Jur3')
AND BX in ('BU1', 'BU2', 'BU3', 'BU4')
AND Scene in (SCENE1, .... SCENE49)
GROUP BY veld_x
,veld_y
order by veld_x
,veld_y
?>
Nu was mijn verwachting even dat ik sommatie's zou krijgen voor alle combinatie's idem als je het discrete doet dus:
Jur1 - BU 1 - SCENE1, veld_x, veld_y, veld_som // voor de combi jur-bx-scene worden meerdere records
Jur1 - BU 1 - SCENE1, veld_x, veld_y, veld_som // geretouneerd omdat op veld_x, veld_y gegroepeerd wordt.
Jur1 - BU 1 - SCENE1, veld_x, veld_y, veld_som
Jur1 - BU 2 - SCENE1, veld_x, veld_y, veld_som
Jur1 - BU 2 - SCENE1, veld_x, veld_y, veld_som
Jur1 - BU 3 - SCENE1, veld_x, veld_y, veld_som
Jur1 - BU 4 - SCENE1, veld_x, veld_y, veld_som
Jur1 - BU 4 - SCENE1, veld_x, veld_y, veld_som
Jur1 - BU 1 - SCENE2, veld_x, veld_y, veld_som
Jur1 - BU 2 - SCENE2, veld_x, veld_y, veld_som
Maar dat gaat niet hem niet worden o.a. vanwege de sommatie.
Hoe kun je dit oplossen zodat voor iedere mogelijke combinatie jur-BX-SCENE met één query alle records geretouneerd worden?
Met 'pseudo' tabellen voor JUR, BX en SCENE die je dan joined op de table?
Of er bestaan momenteel geen stamtabellen met alle mogelijke JUR, BX en SCENE. Kan ik natuurlijk maken en deze joinen met de table waar het om gaat?
Ik vind dit wel even een uitdaging...
Bedankt,
Nico
Toevoeging op 28/07/2017 10:35:35:
Ik kom er zo langzaam achter, dat het vanwege performance redenen het vervangen van de 3-voudige geneste foreach waarbij tig maal queries aangeroepen worden, ingewikkelder is dan wat ik eerst zo ingeschat had.
Ik probeer aan te beschrijven wat er moet gebeuren:
1- 3 velden (JUR, BX, SCENE) hebben ieder afzonderlijk meerdere waarden waar op gezocht moet worden.
2a- Iedere combinatie moet uitgevoerd worden.
2b- voor de totalen moet per SCENE alles opgehaald worden dus ongeacht JUR of BX. Dat is een uitgebreidere set dan die in punt 2 opgehaald is.
2c- en er moet ongeacht JUR voor iedere combi BX en SCENE record sets opgehaald worden voor de totalen per BX.
2d- en er moet ongeacht BX voor iedere combi JUR en SCENE record sets opgehaald worden voor de totalen per JUR.
3- iedere combinatie kan 1 of meerdere records retouneren.
4- De records worden gegroepeerd op andere velden dan die 3 velden (JUR, BX, SCENE)
5- van de gegroepeerde records moeten sommatie's uitgevoerd worden.
--
Het is misschien niet even duidelijk beschreven maar misschien heeft iemand die zeer ervaren is al een 'gevoel', wat er moet gebeuren.
Nogmaals, bij de Foreach wordt iedere combinatie discreet opgehaald, dus ook punt 6, 7 en 8 middels wildcard ('%') en de berekeningen uitgevoerd voor de totalen.
Ik wil nu, indien mogelijk, voor iedere combi alle data in één keer ophalen.
Alle hulp is welkom en als iemand een idee heeft voor de oplossing, in welke richting ik dit moet zoeken, zou ik degene zeer dankbaar zijn.
Ik dacht aan 'in', de oplossing voor iedere combi is. Even een foute gedachte of beter gehoopt, dat de query zelf dan wist dat hij iedere combi moest gaan maken en correct gaat groeperen.
Punt 2a, 2b, 2c en 2d moeten denk ik via een UNION? Althans dat denk ik.
Ik heb nu stamtabellen aangemaakt voor JUR, BX en SCENE en daarmee join ik op de tabel met de data.
Misschien moet ik een heel andere richting gaan denken... en kan dit niet in 1 of 2 3 queries?
Bedankt,
Nico
Er zijn nog geen reacties op dit bericht.