Is het mogelijk om in één query sommatie's te maken voor meervoudige zoekgegevens?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nkamp Kamp van de

nkamp Kamp van de

27/07/2017 23:01:06
Quote Anchor link
Hallo,

Ik ben met een query bezig te herschrijven. Deze werdt per discrete zoek criteria waarden uitgevoerd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
Foreach($this->Jur as Jur) { //5X
   Foreach($this->BX as BX) { //6X
      Foreach($this->Scene as SceneName) { // 49X
         ....
     SELECT veld_x
           ,veld_y
               ,sum(veld_z) as veld_som
     FROM table
     WHERE JUR like 'JUR%'
           AND BX  like 'BX%'
           AND Scene = 'xxxxxx'
     GROUP BY veld_x
         ,veld_y
     order by veld_x
         ,veld_y
      }
   }
}

?>


Dit dacht ik te vervangen door de Foreach te laten vervallen en het op te lossen met 'in'
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>


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.



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.