Loop vast in Union statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

- DHU -

- DHU -

29/11/2020 16:25:52
Quote Anchor link
Hallo allemaal,

Ik schaar mezelf nog steeds onder beginners hoewel eea wel duidelijker gaat worden. Nu wil ik vervolgstap zien te maken maar ik staar me blind om gevens uit twee tabellen met elkaar te vergelijken.

De stituatie is:

Er bestaat een administratie waarin personen rbac geautoriseerd worden volgens het principe Medewerker->Rol->Activiteit-Autorisatie. Dit noemen we de Soll. Daarnaast bestaat er applicatie waarbinnen gebruikers worden geautoriseerd voor bepaalde rechten. Dit noemen we de Ist.

De praktijk is:
Personen stromen in, door en weer uit. Mensen zijn dus in beweging en daardoor veranderd ook de behoefte aan autorisaties.


De wens is:
Periodiek een controle uitvoeren over users met hun rechten (ist) nog steeds overeenkomen met de administratie (soll). Daarvoor importeer ik mbv 3-tal ist-bestanden (autorisatie, user2autorisatie en users) in eigen tabellen.

Maar vanaf dit punt wordt het lastiger... deze bestanden moeten met elkaar vergeleken worden en daar waar verschillen onstaan moet dit zichbaar gaan worden. Wanneer iemand volgens de administratie een autorisatie heeft maar in werkelijkheid niet op het systeem hebben we te maken met een soll-verschil. Heeft iemand een autorisatie binnen de applicatie wel maar niet via de administratie dan hebben we een ist-verschil (mogelijk risico?).

Nu dacht ik de UNION of UNION ALL statement te gebruiken. Zie hieronder. Ik heb een tool FlySpeed SQL Query gebruikt maar die zet all gegevens onder elkaar terwijl voor het gemak de Soll (S) en Ist (I) juist naast elkaar worden getoond en zodoende eenvoudig gegroepeerd overzicht krijg..

De code die ik in elkaar heb geflanst is:

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
global $connection;

            $where = NULL;
            if (isset($_GET['doelsysteem'])){
                $where = 'WHERE MSKEYVALUE_DOELSYSTEEM = "'.mysqli_real_escape_string($connection, $_GET['doelsysteem']).'"';
            }
        
        $sqlUitlezen = mysqli_query($connection, "Select
            bigpicture.idm_autorisatie.MSKEYVALUE_DOELSYSTEEM,
            bigpicture.idm_ou.MSKEYVALUE_OU As S_OU,
            bigpicture.idm_ou.Z_ORG_DN As S_organisatie,
            Count(bigpicture.idm_autorisatie.MSKEYVALUE_AUTORISATIE) As soll
        From
            bigpicture.idm_autorisatie
            Left Join bigpicture.idm_act2aut On bigpicture.idm_act2aut.MSKEYVALUE_AUTORISATIE = bigpicture.idm_autorisatie.MSKEYVALUE_AUTORISATIE
            Left Join bigpicture.idm_activiteit On bigpicture.idm_activiteit.MSKEYVALUE_ACTIVITEIT = bigpicture.idm_act2aut.MSKEYVALUE_ACTIVITEIT
            Left Join bigpicture.idm_role2act On bigpicture.idm_role2act.MSKEYVALUE_ACTIVITEIT = bigpicture.idm_activiteit.MSKEYVALUE_ACTIVITEIT
            Left Join bigpicture.idm_role On bigpicture.idm_role.MSKEYVALUE_ROL = bigpicture.idm_role2act.MSKEYVALUE_ROL
            Left Join bigpicture.idm_person2role On bigpicture.idm_person2role.MSKEYVALUE_ROL = bigpicture.idm_role.MSKEYVALUE_ROL
            Left Join bigpicture.idm_person On bigpicture.idm_person.MSKEYVALUE_MEDEWERKER = bigpicture.idm_person2role.MSKEYVALUE_MEDEWERKER
            Left Join bigpicture.idm_ou On bigpicture.idm_ou.MSKEYVALUE_OU = bigpicture.idm_person.ACHMEA_REF_OU
        
        ".$where."
        
        Group By
            bigpicture.idm_autorisatie.MSKEYVALUE_DOELSYSTEEM,
            bigpicture.idm_ou.MSKEYVALUE_OU,
            bigpicture.idm_ou.Z_ORG_DN
        
        Union All
        
        Select
            bigpicture.ist_aut_swift_productie_cea.Systeem,
            bigpicture.idm_ou.MSKEYVALUE_OU As I_OU,
            bigpicture.idm_ou.Z_ORG_DN As I_organisatie,
            Count(bigpicture.ist_aut_swift_productie_cea.Autorisatienaam) As ist
        From
            bigpicture.ist_aut_swift_productie_cea
            Left Join bigpicture.ist_user2aut_swift_productie_cea On bigpicture.ist_user2aut_swift_productie_cea.Autorisatie_naam = bigpicture.ist_aut_swift_productie_cea.Autorisatienaam
            Left Join bigpicture.ist_user_swift_productie_cea On bigpicture.ist_user_swift_productie_cea.gebruikersnaam = bigpicture.ist_user2aut_swift_productie_cea.gebruikersnaam
            Left Join bigpicture.idm_person On bigpicture.idm_person.ACHMEA_EMPLOYEENUMBER = bigpicture.ist_user_swift_productie_cea.Personeelsnummer
            Left Join bigpicture.idm_ou On bigpicture.idm_ou.MSKEYVALUE_OU = bigpicture.idm_person.ACHMEA_REF_OU
        Group By
            bigpicture.ist_aut_swift_productie_cea.Systeem,
            bigpicture.idm_ou.MSKEYVALUE_OU,
            bigpicture.idm_ou.Z_ORG_DN
        Order By
            MSKEYVALUE_DOELSYSTEEM Desc,
            S_OU
            
            ");


maar helaas is niet erg bruikbaar op deze manier.. iemand een idee? of kan me in een goede richten manoevreren?
Heel beniewd en ik waaardeer nu al jullie tomeloze inzet en voor het meedenken..

Toevoeging op 29/11/2020 16:40:22:

Een andere methode is dat ik heb geprobeerd om 2 select statements apart te definieren. Helaas geeft dat ook niet gewenste restultaat... ik draai maar rondjes en weet niet goed hoe ik dit nu moet aanpakken.


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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php

//------------------------------------------------------------------------ FUNCTIE Soll/Ist vergelijking op systeemniveau
    function soll_ist_systeem_swift_productie_cea(){
        global $connection;

            $where = NULL;
            if (isset($_GET['doelsysteem'])){
                $where = 'WHERE MSKEYVALUE_DOELSYSTEEM = "'.mysqli_real_escape_string($connection, $_GET['doelsysteem']).'"';
            }

        
        $sqlUitlezenSoll = mysqli_query($connection, "Select
            bigpicture.idm_autorisatie.MSKEYVALUE_DOELSYSTEEM,
            bigpicture.idm_ou.MSKEYVALUE_OU As S_OU,
            bigpicture.idm_ou.Z_ORG_DN As S_organisatie,
            Count(bigpicture.idm_autorisatie.MSKEYVALUE_AUTORISATIE) As soll
        From
            bigpicture.idm_autorisatie
            Left Join bigpicture.idm_act2aut On bigpicture.idm_act2aut.MSKEYVALUE_AUTORISATIE = bigpicture.idm_autorisatie.MSKEYVALUE_AUTORISATIE
            Left Join bigpicture.idm_activiteit On bigpicture.idm_activiteit.MSKEYVALUE_ACTIVITEIT = bigpicture.idm_act2aut.MSKEYVALUE_ACTIVITEIT
            Left Join bigpicture.idm_role2act On bigpicture.idm_role2act.MSKEYVALUE_ACTIVITEIT = bigpicture.idm_activiteit.MSKEYVALUE_ACTIVITEIT
            Left Join bigpicture.idm_role On bigpicture.idm_role.MSKEYVALUE_ROL = bigpicture.idm_role2act.MSKEYVALUE_ROL
            Left Join bigpicture.idm_person2role On bigpicture.idm_person2role.MSKEYVALUE_ROL = bigpicture.idm_role.MSKEYVALUE_ROL
            Left Join bigpicture.idm_person On bigpicture.idm_person.MSKEYVALUE_MEDEWERKER = bigpicture.idm_person2role.MSKEYVALUE_MEDEWERKER
            Left Join bigpicture.idm_ou On bigpicture.idm_ou.MSKEYVALUE_OU = bigpicture.idm_person.ACHMEA_REF_OU
            
        "
.$where."
        
        Group By
            bigpicture.idm_autorisatie.MSKEYVALUE_DOELSYSTEEM,
            bigpicture.idm_ou.MSKEYVALUE_OU,
            bigpicture.idm_ou.Z_ORG_DN
        Order By
            bigpicture.idm_autorisatie.MSKEYVALUE_DOELSYSTEEM Desc,
            S_OU
        "
);
        
        
        $sqlUitlezenIst = mysqli_query($connection, "Select
            bigpicture.ist_aut_swift_productie_cea.Systeem,
            bigpicture.idm_ou.MSKEYVALUE_OU As I_OU,
            bigpicture.idm_ou.Z_ORG_DN As I_organisatie,
            Count(bigpicture.ist_aut_swift_productie_cea.Autorisatienaam) As ist
        From
            bigpicture.ist_aut_swift_productie_cea
            Left Join bigpicture.ist_user2aut_swift_productie_cea On bigpicture.ist_user2aut_swift_productie_cea.Autorisatie_naam = bigpicture.ist_aut_swift_productie_cea.Autorisatienaam
            Left Join bigpicture.ist_user_swift_productie_cea On bigpicture.ist_user_swift_productie_cea.gebruikersnaam = bigpicture.ist_user2aut_swift_productie_cea.gebruikersnaam
            Left Join bigpicture.idm_person On bigpicture.idm_person.ACHMEA_EMPLOYEENUMBER = bigpicture.ist_user_swift_productie_cea.Personeelsnummer
            Left Join bigpicture.idm_ou On bigpicture.idm_ou.MSKEYVALUE_OU = bigpicture.idm_person.ACHMEA_REF_OU
        Group By
            bigpicture.ist_aut_swift_productie_cea.Systeem,
            bigpicture.idm_ou.MSKEYVALUE_OU,
            bigpicture.idm_ou.Z_ORG_DN
            
        "
);
        
        $sqlAantalSoll = mysqli_num_rows($sqlUitlezenSoll);
                
        echo '<table id="idmdata">';
        echo '<tr>';
        echo '<th colspan="5">Audit: Soll/IST systeemrapport voor '.strtoupper($_GET['doelsysteem']).'</th>';
        echo '</tr>';
        echo '<tr>';
        echo '<th>Soll</th>';
        echo '<th>Ist</th>';
        echo '<th align="center">S</th>';
        echo '</tr>';
        echo '<tr>';
        echo '<th><font size="-1">OU code</th>';
        echo '<th><font size="-1">Afdeling</th>';
        echo '<th><font size="-1"></th>';
        echo '</tr>';

        if ($sqlAantalSoll > 0){
            while ($sqlDataSoll = mysqli_fetch_assoc($sqlUitlezenSoll)){        
                echo '<tr>';        
                echo '<td><font size="-2">'.$sqlDataSoll['S_OU'].'</td>';
                echo '<td><font size="-2">'.$sqlDataSoll['S_organisatie'].'</td>';
                echo '<td><font size="-2">'.$sqlDataSoll['soll'].'</td>';
                echo '</tr>';
            }

            echo '</table>';
            echo '<br />';

        echo '<button class="button1" style="vertical-align:middle"><span><div id="button"><a href="javascript:javascript:history.go(-1)">&nbsp;&nbsp;Vorige pagina</a></div></span></button>';    
        }

        
        $sqlAantalIst = mysqli_num_rows($sqlUitlezenIst);
                
        echo '<table id="idmdata">';
        echo '<tr>';
        echo '<th colspan="5">Audit: Soll/IST systeemrapport voor '.strtoupper($_GET['doelsysteem']).'</th>';
        echo '</tr>';
        echo '<tr>';
        echo '<th>Soll</th>';
        echo '<th>Ist</th>';
        echo '<th align="center">I</th>';
        echo '</tr>';
        echo '<tr>';
        echo '<th><font size="-1">OU code</th>';
        echo '<th><font size="-1">Afdeling</th>';
        echo '<th><font size="-1"></th>';
        echo '</tr>';

        if ($sqlAantalIst > 0){
            while ($sqlDataIst = mysqli_fetch_assoc($sqlUitlezenIst)){        
                echo '<tr>';        
                echo '<td><font size="-2">'.$sqlDataIst['I_OU'].'</td>';
                echo '<td><font size="-2">'.$sqlDataIst['I_organisatie'].'</td>';
                echo '<td><font size="-2">'.$sqlDataIst['ist'].'</td>';
                echo '</tr>';
            }

            echo '</table>';
            echo '<br />';    
        
        echo '<button class="button1" style="vertical-align:middle"><span><div id="button"><a href="javascript:javascript:history.go(-1)">&nbsp;&nbsp;Vorige pagina</a></div></span></button>';    
        }

        
        else{
            echo '<center><a href="javascript:javascript:history.go(-1)"><img src="../img/no-data.png"></a></center>';
        }
        
        
    }


?>
 
PHP hulp

PHP hulp

29/03/2024 08:36:29
 
Willem vp

Willem vp

01/12/2020 11:13:35
Quote Anchor link
Wat ik van je bericht heb begrepen (en hopelijk klopt dat) is dat je query de juiste resultaten geeft, maar dat je de soll/ist-tabellen naast elkaar wil hebben en dat dat hetgene is waar je mee stoeit.

Voor ik verder iets zeg, wil ik je eerst wijzen op een foutje in je tweede stuk code: op regel 82 en 113 staat de </table> binnen het if-statement. Dat houdt in dat als de query geen resultaten oplevert, de tabel niet wordt afgesloten. De </table> zou dus buiten het if-blok geplaatst moeten worden (of de openingstag en de header-regels moeten ook binnen het if-statement; net wat voor jou logischer is).

Ook hebben beide tabellen hetzelfde id ("idmdata"). Dat mag niet; een id moet uniek zijn op je pagina.

Er zijn verschillende manieren om de tabellen naast elkaar te krijgen. Ik zal hieronder twee van die manieren schetsen, zodat je iets hebt om mee te spelen. Ongetwijfeld zullen er meer oplossingen te bedenken zijn.

1: tabel met tabellen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<table>
 <tr>
  <td>
   [plaats hier je soll-tabel]
  </td>
  <td>
   [plaats hier je ist-tabel]
  </td>
 </tr>
</table>


2: elke tabel in een div en die divs naast elkaar plaatsen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<div id="wrapper">
 <div style="display:inline-block;">
  [plaats hier je soll-tabel]
 </div>
 <div style="display:inline-block;">
  [plaats hier je ist-tabel]
 </div>
</div>


Mijn eigen voorkeur gaat uit naar de tweede manier. De eerste, met geneste tabellen, is meer iets van tien jaar geleden en zou misschien zelfs voor een wat tragere opmaak van je pagina kunnen zorgen.
 
Ad Fundum

Ad Fundum

01/12/2020 15:07:20
Quote Anchor link
Als je de gegevens vanuit het SQL-resultaat naast elkaar wilt hebben, is het handig om een FULL OUTER JOIN te doen in plaats van een UNION. Een UNION zet het resultaat van twee queries onder elkaar, en ontdubbelt rijen. Een FULL OUTER JOIN vergelijkt rijen van twee tabellen en/of subqueries.

Voor PostgreSQL, zie https://www.postgresqltutorial.com/postgresql-full-outer-join

MySQL en MariaDB ondersteunen geen FULL OUTER JOIN. Je kunt met een omweg zo'n JOIN wel 'nadoen' met een UNION.
Voorbeeld: https://stackoverflow.com/questions/4796872/how-to-do-a-full-outer-join-in-mysql

Merk op dat je de twee GROUP BY in een UNION wilt verplaatsen buiten de UNION, dus met de UNION in een subquery waarvan je GROUP BY doet op het resultaat van de UNION.
Voorbeeld: https://stackoverflow.com/questions/8572821/group-by-with-union-mysql-select-query

Wanneer de resultaten eenmaal uit de database komen zoals je ze op het scherm wilt hebben, is de vertaalslag van een SQL resultaat naar HTML een stuk simpeler voor, en sneller in PHP.

EDIT: de UNION ALL die je in jouw code hebt, ontdubbelt juist geen rijen maar laat ze allemaal door.
Gewijzigd op 01/12/2020 15:10:35 door Ad Fundum
 
- DHU -

- DHU -

03/12/2020 23:40:01
Quote Anchor link
@ Willem vp

Dank je voor dit inzicht en de verbetering. Helemaal top. Eigenlijk is dit voorstel best eenvoudig en die zou ik ook zeker bedacht kunnen hebben wanneer er twee platte lijsten getoond moest tonen. Maar wat ik graag willen, en dat heb ik misschien dan niet goed naar voren laten komen in mijn eerdere bericht is dat de rechterlijst (Ist) vergeleken kan worden met de linkerlijst (soll) en andersom en dan bij verschillen (links of rechts) dit met een kleurtje wordt aangegeven bijv.. Hieronder heb ik de php-functie die ik nu heb in zijn totaliteit geplaats met jouw 2e optie. Dat geeft een prima weergave van de twee tabellen naast elkaar. Maar hoe dan hierbij met het if-statment gewerkt kan worden in de twee verschillende while loops weet ik voorsalnog niet te doorbreken. Misschien dat de optie van Ad Fundum daar uitkomst in bied. Daar ga ik zeker ook nog naar kijken maar daar heb ik meer tijd voor nodig om dat proberen te doorgronden. Maar we blijven stug doorproberen horen hoewel het een puzzelstuk blijf.

Hieronder dan nog de complete code wat als resultaat de twee tabellen naast elkaar op scherm te projecteren:

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php

//------------------------------------------------------------------------ FUNCTIE Soll/Ist vergelijking op systeemniveau
    function soll_ist_systeem_swift_productie_cea(){
        global $connection;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------- SOLL
        $whereSoll = NULL;
        if (isset($_GET['doelsysteem'])){
            $whereSoll = 'WHERE idm_doelsysteem.MSKEYVALUE_DOELSYSTEEM = "'.mysqli_real_escape_string($connection, $_GET['doelsysteem']).'"';
        }


        $sqlUitlezenSoll = mysqli_query($connection, "Select
            bigpicture.idm_person.REF_OU AS S_OU,
            Count(bigpicture.idm_autorisatie.MSKEYVALUE_AUTORISATIE) As Soll
        From
            bigpicture.idm_doelsysteem
            Inner Join idm_autorisatie On idm_autorisatie.MSKEYVALUE_DOELSYSTEEM = idm_doelsysteem.MSKEYVALUE_DOELSYSTEEM
            Inner Join idm_act2aut On idm_act2aut.MSKEYVALUE_AUTORISATIE = idm_autorisatie.MSKEYVALUE_AUTORISATIE
            Inner Join idm_role2act On idm_role2act.MSKEYVALUE_ACTIVITEIT = idm_act2aut.MSKEYVALUE_ACTIVITEIT
            Inner Join idm_person2role On idm_person2role.MSKEYVALUE_ROL = idm_role2act.MSKEYVALUE_ROL
            Inner Join idm_person On idm_person.MSKEYVALUE_MEDEWERKER = idm_person2role.MSKEYVALUE_MEDEWERKER
        
        "
.$whereSoll."  
        
        Group By
            idm_doelsysteem.MSKEYVALUE_DOELSYSTEEM,
            idm_person.REF_OU
    
        "
);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------- IST
        $whereIst = NULL;
        if (isset($_GET['doelsysteem'])){
            $whereIst = 'WHERE idm_doelsysteem.MSKEYVALUE_DOELSYSTEEM = "'.mysqli_real_escape_string($connection, $_GET['doelsysteem']).'"';
        }


        $sqlUitlezenIst = mysqli_query($connection, "Select
            idm_person.REF_OU AS I_OU,
            Count(ist_user2aut_swift_productie_cea.Autorisatie_naam) As Ist
        From
            ist_user2aut_swift_productie_cea
            Inner Join idm_person On idm_person.ACCOUNTNAME = ist_user2aut_swift_productie_cea.gebruikersnaam

        Group By
            idm_person.REF_OU
        "
);
//---------------------------------------------------------------------------------------------------------------------------------------------------------------

            echo'<div id="wrapper">';
            echo'<div style="display:inline-block;">';
            $sqlAantalSoll = mysqli_num_rows($sqlUitlezenSoll);
            echo '<table id="idmdata" width="48%">';
            echo '<th><font size="-1">Soll</th>';
            echo '<th><font size="-1">#</th>';
            echo '</tr>';
                if ($sqlAantalSoll > 0){
                while ($sqlDataSoll = mysqli_fetch_assoc($sqlUitlezenSoll)){        
                echo '<tr>';        
                echo '<td><font size="-2">'.$sqlDataSoll['S_OU'].' </td>';
                echo '<td><font size="-2">'.$sqlDataSoll['Soll'].' </td>';
                echo '</tr>';
                }
                }
else{
                echo '<center>GEEN SOLL GEGEVENS GEVONDEN!</center>';
                }

            echo '</table>';
            echo'</div>';

            echo'<div style="display:inline-block;">';
            $sqlAantalIst = mysqli_num_rows($sqlUitlezenIst);
            echo '<table id="idmdata" width="48%">';
            echo '<th align="right"><font size="-1">Ist</th>';
            echo '<th><font size="-1">#</th>';
            echo '</tr>';    
                if ($sqlAantalIst > 0){
                while ($sqlDataIst = mysqli_fetch_assoc($sqlUitlezenIst)){        
                echo '<tr>';        
                echo '<td><font size="-2">'.$sqlDataIst['I_OU'].' </td>';
                echo '<td><font size="-2">'.$sqlDataIst['Ist'].' </td>';
                echo '</tr>';
                }            
                }
else{
                echo '<center>GEEN IST GEGEVENS GEVONDEN!</center>';
            }
        
            echo '</table>';
            echo'</div>';
            echo'</div>';

//---------------------------------------------------------------------------------------------------------------------------------------------------------------        
        echo '<button class="button1" style="vertical-align:middle"><span><div id="button"><a href="javascript:javascript:history.go(-1)">&nbsp;&nbsp;Vorige pagina</a></div></span></button>';    
}


?>
Gewijzigd op 03/12/2020 23:53:56 door - DHU -
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/12/2020 17:04:52
Quote Anchor link
Gebaseerd op het OT:
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SELECT
    idm_ou.MSKEYVALUE_OU,
    idm_ou.Z_ORG_DN,
    COUNT(DISTINCT idm_person2role.MSKEYVALUE_MEDEWERKER) soll,
    COUNT(DISTINCT ist_user_swift_productie_cea.Personeelsnummer) ist
FROM
    idm_person p
INNER JOIN
    idm_ou ON idm_ou.MSKEYVALUE_OU = idm_person.ACHMEA_REF_OU
LEFT JOIN
    (idm_person2role
    INNER JOIN
        (SELECT
            DISTINCT role2act.MSKEYVALUE_ROL
        FROM
            idm_autorisatie
        INNER JOIN
            idm_act2aut ON idm_act2aut.MSKEYVALUE_AUTORISATIE = idm_autorisatie.MSKEYVALUE_AUTORISATIE
        INNER JOIN
            idm_role2act ON idm_role2act.MSKEYVALUE_ACTIVITEIT =idm_act2aut.MSKEYVALUE_ACTIVITEIT    
        WHERE
            idm_autorisatie.MSKEYVALUE_DOELSYSTEEM = 'waarde van $_GET'
        ) soll_t ON soll_t.MSKEYVALUE_ROL = idm_person2role.MSKEYVALUE_ROL
    ) ON idm_person2role.MSKEYVALUE_MEDEWERKER = idm_person.MSKEYVALUE_MEDEWERKER
LEFT JOIN
    (ist_user_swift_productie_cea
    INNER JOIN
        (SELECT
            DISTINCT ist_user2aut_swift_productie_cea.gebruikersnaam
        FROM
            ist_aut_swift_productie_cea
        INNER JOIN
            ist_user2aut_swift_productie_cea ON ist_user2aut_swift_productie_cea.Autorisatie_naam = ist_aut_swift_productie_cea.Autorisatienaam
        ) ist_t ON ist_t.gebruikersnaam = ist_user_swift_productie_cea.gebruikersnaam
    ) ON idm_person.ACHMEA_EMPLOYEENUMBER = ist_user_swift_productie_cea.Personeelsnummer
GROUP BY
    idm_ou.MSKEYVALUE_OU,
    idm_ou.Z_ORG_D


Dit telt het aantal personen dat een autorisatie heeft op soll en/of ist per afdeling
Gewijzigd op 04/12/2020 17:08:19 door Ger van Steenderen
 
- DHU -

- DHU -

04/12/2020 22:46:46
Quote Anchor link
Sorry Ger,
deze code werkt niet resulteert niet in een resultaat.. komt geen melding en bij wat dingen uitproberen krijg ik afhankelijke wat ik aan het proberen ben foutmeldingen... ergens klopt er niet in... maar ga het proberen of ik het kan achterhalen waar het 'm in zit. Dit zal zeker niet voor komende zondag zijn...... Maar toch onwijs bedankt voor de reactie
 
- Ariën  -
Beheerder

- Ariën -

05/12/2020 10:51:49
Quote Anchor link
Even een opmerking: Waarom die hele echo-put in een script?
Is dit niet beter leesbaar? Je ziet zo beter onderscheid tussen HTML en PHP, en je hoeft niet meer te escapen.

Verder zijn font-tags verouderd, en kan je de opmaak prima in CSS bewerkstelligen.

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
21
22
23
24
<div style="display:inline-block;">';
<?php
$sqlAantalSoll
= mysqli_num_rows($sqlUitlezenSoll);
?>

<table id="idmdata" width="48%">
    <th><font size="-1">Soll</th>
    <th><font size="-1">#</th>
    </tr>
<?php              
if ($sqlAantalSoll > 0){
                while ($sqlDataSoll = mysqli_fetch_assoc($sqlUitlezenSoll)){        
                ?>

        <tr>      
                    <td><font size="-2"><?=$sqlDataSoll['S_OU'];?></td>
                    <td><font size="-2"><?=$sqlDataSoll['Soll'];?></td>
                </tr>
        <?php
                }
}
else{
    echo '<center>GEEN SOLL GEGEVENS GEVONDEN!</center>';
}

?>

    </table>
</div>
Gewijzigd op 05/12/2020 10:55:58 door - Ariën -
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/12/2020 11:12:05
Quote Anchor link
@DHU
Op regel 7 in de SQL staat een alias p achter FROM idm_person (macht der gewoonte) dit moet je iig weghalen.

Wel vreemd dat je dan geen melding krijgt als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Error( 1054 ) 42S22: "Unknown column 'idm_person.MSKEYVALUE_MEDEWERKER' in 'on clause'"


Toevoeging op 05/12/2020 11:12:26:

@DHU
Op regel 7 in de SQL staat een alias p achter FROM idm_person (macht der gewoonte) dit moet je iig weghalen.

Wel vreemd dat je dan geen melding krijgt als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Error( 1054 ) 42S22: "Unknown column 'idm_person.MSKEYVALUE_MEDEWERKER' in 'on clause'"
 
- DHU -

- DHU -

05/12/2020 16:26:59
Quote Anchor link
- Ariën - op 05/12/2020 10:51:49:
Even een opmerking: Waarom die hele echo-put in een script?
Is dit niet beter leesbaar? Je ziet zo beter onderscheid tussen HTML en PHP, en je hoeft niet meer te escapen.

Verder zijn font-tags verouderd, en kan je de opmaak prima in CSS bewerkstelligen.

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
21
22
23
24
<div style="display:inline-block;">';
<?php
$sqlAantalSoll
= mysqli_num_rows($sqlUitlezenSoll);
?>

<table id="idmdata" width="48%">
    <th><font size="-1">Soll</th>
    <th><font size="-1">#</th>
    </tr>
<?php              
if ($sqlAantalSoll > 0){
                while ($sqlDataSoll = mysqli_fetch_assoc($sqlUitlezenSoll)){        
                ?>

        <tr>      
                    <td><font size="-2"><?=$sqlDataSoll['S_OU'];?></td>
                    <td><font size="-2"><?=$sqlDataSoll['Soll'];?></td>
                </tr>
        <?php
                }
}
else{
    echo '<center>GEEN SOLL GEGEVENS GEVONDEN!</center>';
}

?>

    </table>
</div>






eigenlijk is dat iets wat ik aangeleerd heb.. :-)
die html-tages was probeersel... opmaak verloopt ook voor het leeuwendeel via css hoor maar soms wil ik voor de probeer even daar van afstappen maar hoort daar ook niet. klopt.

Toevoeging op 05/12/2020 16:49:57:

@Ger

Die p als alias verwijderd... en een N toegevoegd aan de laaste GROUB BY maar ben er dan nog niet mee... Nu krijg ik wel een foutmelding.

Deze luidt:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\BP\members\functies\audit\soll_ist_systeem_swift_productie_cea.php on line 53


voor de volledig hieronder nog de gehele code.

Toevoeging op 05/12/2020 16:50:45:

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
    function soll_ist_systeem_swift_productie_cea(){
        global $connection;

        $where = NULL;
        if (isset($_GET['doelsysteem'])){
            $where = 'WHERE idm_doelsysteem.MSKEYVALUE_DOELSYSTEEM = "'.mysqli_real_escape_string($connection, $_GET['doelsysteem']).'"';
        }


        $sqlUitlezen = mysqli_query($connection, "SELECT
            idm_ou.MSKEYVALUE_OU,
            idm_ou.Z_ORG_DN,
            COUNT(DISTINCT idm_person2role.MSKEYVALUE_MEDEWERKER) soll,
            COUNT(DISTINCT ist_user_swift_productie_cea.Personeelsnummer) ist
        FROM
            idm_person
        INNER JOIN
            idm_ou ON idm_ou.MSKEYVALUE_OU = idm_person.ACHMEA_REF_OU
        LEFT JOIN
            (idm_person2role
            INNER JOIN
                (SELECT
                    DISTINCT role2act.MSKEYVALUE_ROL
                FROM
                    idm_autorisatie
                INNER JOIN
                    idm_act2aut ON idm_act2aut.MSKEYVALUE_AUTORISATIE = idm_autorisatie.MSKEYVALUE_AUTORISATIE
                INNER JOIN
                    idm_role2act ON idm_role2act.MSKEYVALUE_ACTIVITEIT = idm_act2aut.MSKEYVALUE_ACTIVITEIT    
                
        "
.$where."
                
                ) soll_t ON soll_t.MSKEYVALUE_ROL = idm_person2role.MSKEYVALUE_ROL
            ) ON idm_person2role.MSKEYVALUE_MEDEWERKER = idm_person.MSKEYVALUE_MEDEWERKER
        LEFT JOIN
            (ist_user_swift_productie_cea
            INNER JOIN
                (SELECT
                    DISTINCT ist_user2aut_swift_productie_cea.gebruikersnaam
                FROM
                    ist_aut_swift_productie_cea
                INNER JOIN
                    ist_user2aut_swift_productie_cea ON ist_user2aut_swift_productie_cea.Autorisatie_naam = ist_aut_swift_productie_cea.Autorisatienaam
                ) ist_t ON ist_t.gebruikersnaam = ist_user_swift_productie_cea.gebruikersnaam
            ) ON idm_person.ACHMEA_EMPLOYEENUMBER = ist_user_swift_productie_cea.Personeelsnummer
        GROUP BY
            idm_ou.MSKEYVALUE_OU,
            idm_ou.Z_ORG_DN
        "
);


            echo'<div style="display:inline-block;">';
            $sqlAantal = mysqli_num_rows($sqlUitlezen);
            echo '<table id="idmdata" width="48%">';
            echo '<th>Afdeling</th>';
            echo '<th>S</th>';
            echo '<th>I</th>';
            echo '</tr>';
                if ($sqlAantal > 0){
                while ($sqlData = mysqli_fetch_assoc($sqlUitlezen)){        
                echo '<tr>';        
                echo '<td><font size="-1">'.$sqlData['MSKEYVALUE_OU'].' </td>';
                echo '<td><font size="-1">'.$sqlData['soll'].' </td>';
                echo '<td><font size="-1">'.$sqlData['ist'].' </td>';
                echo '</tr>';
                }
                }
else{
                echo '<center>GEEN SOLL/IST GEGEVENS GEVONDEN!</center>';
                }

            echo '</table>';
            echo'</div>';
        echo '<button class="button1" style="vertical-align:middle"><span><div id="button"><a href="javascript:javascript:history.go(-1)">&nbsp;&nbsp;Vorige pagina</a></div></span></button>';    
}

?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/12/2020 19:46:23
Quote Anchor link
Wat jij aangeeft is een PHP error, dat zegt niet zo veel behalve dat er zeer waarschijnlijk ergens een fout in de query zit. Om die te achterhalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if (!$sqlUitlezen) {
    echo mysqli_error($connection);
}

else {
    // toon gegevens
}
?>
 
- DHU -

- DHU -

05/12/2020 21:39:48
Quote Anchor link
Ger van Steenderen op 05/12/2020 19:46:23:
Wat jij aangeeft is een PHP error, dat zegt niet zo veel behalve dat er zeer waarschijnlijk ergens een fout in de query zit. Om die te achterhalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if (!$sqlUitlezen) {
    echo mysqli_error($connection);
}

else {
    // toon gegevens
}
?>




thnx.... zat idd een verwijzing naar een tabel die die niet bestond (oopsie).... issue herstel... de tabellen lijken gevonden maar krijg nu een andere een melding over een unknown column in field list. Dus ben weer opnieuw aan googlen naar deze melding
 
- Ariën  -
Beheerder

- Ariën -

05/12/2020 21:53:08
Quote Anchor link
Wat is nu de volledige foutmelding?
 
- DHU -

- DHU -

05/12/2020 22:12:10
Quote Anchor link
- Ariën - op 05/12/2020 21:53:08:
Wat is nu de volledige foutmelding?


Het lijkt er op dat ik de unknown colums (3x) het weten te tacklen. Bij het aanroepen van deze functie komt er nu (vooralsnog) geen foutmelding naar voren... maar uhm, d'r komt ook niet anders naar voren. De brouwser blijf maar laden..... na zo'n 10 minuten nog steeds niets leesbaars op scherm... zit dus ergens nog niet iets jofiaals

Toevoeging op 05/12/2020 22:21:43:

- DHU - op 05/12/2020 22:12:10:
- Ariën - op 05/12/2020 21:53:08:
Wat is nu de volledige foutmelding?


Het lijkt er op dat ik de unknown colums (3x) het weten te tacklen. Bij het aanroepen van deze functie komt er nu (vooralsnog) geen foutmelding naar voren... maar uhm, d'r komt ook niet anders naar voren. De brouwser blijf maar laden..... na zo'n 10 minuten nog steeds niets leesbaars op scherm... zit dus ergens nog niet iets jofiaals



Uiteindelijk na 15 minuten de boel maar geforceerd onderbroken en de webserver services maar opnieuw herstart. De code toch maar weer induiken ben ik bang :-)
 
Ad Fundum

Ad Fundum

07/12/2020 13:32:26
Quote Anchor link
Het helpt niet als ik nog eens wijs om het te proberen met een FULL OUTER JOIN? Scheelt werk volgens mij.

Overigens is die SELECT DISTINCT een indicatie dat je naar de indices wilt kijken, tenzij performance geen issue is.
 
- DHU -

- DHU -

07/12/2020 16:42:00
Quote Anchor link
Ad Fundum op 07/12/2020 13:32:26:
Het helpt niet als ik nog eens wijs om het te proberen met een FULL OUTER JOIN? Scheelt werk volgens mij.

Overigens is die SELECT DISTINCT een indicatie dat je naar de indices wilt kijken, tenzij performance geen issue is.




Toevoeging op 07/12/2020 16:45:35:

Ad Fundum op 07/12/2020 13:32:26:
Het helpt niet als ik nog eens wijs om het te proberen met een FULL OUTER JOIN? Scheelt werk volgens mij.

Overigens is die SELECT DISTINCT een indicatie dat je naar de indices wilt kijken, tenzij performance geen issue is.
[/quotr]

Waarom zou dat net helpen? alle opties staan toch open... maar dit stukje raakt ook behoorlijk de technische inzicht.. dat gaat niet zo super hard.. en overal moet ik op inlezen.. maar aanbod is zo hoog dat je als 'leek' je ook altijd moet afvragen is de info die ik lees de juiste... en officiele php site gaat behoorljk de techniek in..

voor mijn vraag wil ik ook wel vergoeding tegenover zetten wanneer deze in verhouding ligt... maar daar wil wel een een 'vacature' voor plaatsn...
 
- Ariën  -
Beheerder

- Ariën -

07/12/2020 17:15:00
Quote Anchor link
Je bent vrij om een vacature te plaatsen in het vacatureforum. Lees wel a.u.b. de criteria.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/12/2020 14:19:46
Quote Anchor link
- DHU - op 07/12/2020 16:42:00:
Waarom zou dat net helpen? alle opties staan toch open... maar dit stukje raakt ook behoorlijk de technische inzicht.. dat gaat niet zo super hard.. en overal moet ik op inlezen.. maar aanbod is zo hoog dat je als 'leek' je ook altijd moet afvragen is de info die ik lees de juiste... en officiele php site gaat behoorljk de techniek in..

Het is niet zo zeer een php ding (tenzij je een oneindige loop hebt) maar een SQL.
Ik had de subqueries erin gezet om duidelijk te maken wat er gebeurt maar deze zijn over het algemeen niet bevorderlijk voor de performance.

Aangepast:
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
SELECT
    idm_person.REF_OU,
    COUNT(DISTINCT idm_person2role.MSKEYVALUE_MEDEWERKER) soll,
    COUNT(DISTINCT ist_user2aut_swift_productie_cea.gebruikersnaam) ist
FROM
    idm_autorisatie
INNER JOIN
    idm_act2aut ON idm_act2aut.MSKEYVALUE_AUTORISATIE = idm_autorisatie.MSKEYVALUE_AUTORISATIE
INNER JOIN
    idm_role2act ON idm_role2act.MSKEYVALUE_ACTIVITEIT = idm_act2aut.MSKEYVALUE_ACTIVITEIT
INNER JOIN
    idm_person2role ON idm_person2role.MSKEYVALUE_ROL = idm_role2act.MSKEYVALUE_ROL
RIGHT JOIN
    idm_person ON idm_person.MSKEYVALUE_MEDEWERKER = idm_person2role.MSKEYVALUE_MEDEWERKER
        AND idm_autorisatie.MSKEYVALUE_DOELSYSTEEM = 'waarde van $_GET'
LEFT JOIN
    ist_user2aut_swift_productie_cea ON  idm_person.ACCOUNTNAME = ist_user2aut_swift_productie_cea.gebruikersnaam
GROUP BY
    idm_person.REF_OU

Ik heb tabel- en kolomnamen overgenomen uit jouw tweede reactie.
 
- DHU -

- DHU -

08/12/2020 21:40:42
Quote Anchor link
Hoi Ger,

Wederom is mijn dank groot voor het aandragen van de code... maar ook blijf de browser maar pollen en komt er geen resultaat op scherm. Ik wil je bedanken maar ik zet het voor nu allemaal maar even in de ijskast. Ik snap gewoon niet wat er gaande is en het is voor mij niet te volgen. Het is verdomd lastig als je hier geen cursus in hebt gevolgd of dat je van niemand tekst en uitleg krijgt. Ik zou je inzet wel willen belonen voor de inspanning maar laten we die dan even buiten hier houden. Je hebt er nu al zoveel tijd ingestoken. Neem aub even contact op voor afstemming.

Dank je wel en de rest natuurlijk ook voor het meedenken.

Toevoeging op 08/12/2020 22:07:42:

Hoi Ger,

Wederom is mijn dank groot voor het aandragen van de code... maar ook blijf de browser maar pollen en komt er geen resultaat op scherm. Ik wil je bedanken maar ik zet het voor nu allemaal maar even in de ijskast. Ik snap gewoon niet wat er gaande is en het is voor mij niet te volgen. Het is verdomd lastig als je hier geen cursus in hebt gevolgd of dat je van niemand tekst en uitleg krijgt. Ik zou je inzet wel willen belonen voor de inspanning maar laten we die dan even buiten hier houden. Je hebt er nu al zoveel tijd ingestoken. Neem aub even contact op voor afstemming.

Dank je wel en de rest natuurlijk ook voor het meedenken.
 
Ad Fundum

Ad Fundum

09/12/2020 09:40:54
Quote Anchor link
Je hebt gelijk dat SQL lastig kan zijn.

Voor wanneer je het weer op wilt pakken: in SQL is alles een tabel, zoals de output van een SELECT-statement. Je kunt die output direct hergebruiken in een ander SELECT-statement.

Met een UNION plak je de output van twee tabellen onder elkaar, maar dat is niet wat je wilt.
Wat je wilt is dat de resultaten naast elkaar vergeleken worden.

Dat kan je doen met een JOIN bij het FROM-statement:
- een INNER JOIN geeft alle rijen die in beide sets voorkomen
- een LEFT JOIN (of omgekeerd: RIGHT JOIN) geeft alle rijen die in de ene set voorkomen, en eventueel die van de andere
- een (FULL) OUTER JOIN geeft rijen die in de ene en/of andere set voorkomen

Als je vanuit een SQL-client werkt (HeidiSQL, TOra, ...) kan je een al een SELECT-statement schrijven die alle resultaten geeft die je nodig hebt, via een FULL OUTER JOIN. En later stop je die werkende query in PHP, voor het mooi presenteren in HTML.

Het gaat dus om SQL.
Om te beginnen schrijf je twee werkende SELECT-queries voor de twee systemen (IST en SOLL), waaruit alle data komt die je wilt vergelijken of wilt laten zien in het rapport.
Vervolgens zet je de output van die twee queries in een FULL OUTER JOIN voor de vergelijking.
Je gebruikt mysqli_*() dus je database zal zijn in MySQL of MariaDB, die allebei geen FULL OUTER JOIN ondersteunen.
Maar het kan met een omweg. Bijvoorbeeld:

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
WITH `ist` AS (
  SELECT  -- van de IST-omgeving
),
`soll` AS (
  SELECT  -- van de SOLL-omgeving
)
SELECT *
FROM `ist`
  LEFT JOIN `soll`
    ON `ist`.`id` = `soll`.`id`
UNION SELECT *
FROM `ist`
  RIGHT JOIN `soll`
    ON `ist`.`id` = `soll`.`id`
WHERE `ist`.`id` IS NULL;


Details: https://dev.mysql.com/doc/refman/8.0/en/outer-join-simplification.html
 
- DHU -

- DHU -

12/12/2020 09:57:51
Quote Anchor link
Thxn 4 the input en voor het meedenken. Geldt voor iedereen die met me meedenkt. Ben hier eens voorzicht mee aan het experimenteren geweest maar ik loop tegen een performance (?) issue aan denk ik die ik eerst moet zien te tacklen.

Om de soll-positie te kunnen vaststellen dien ik gebruik te maken van een autorisatietabel met liefst 5 inner joins om te kunnen bepalen door wie en waar deze in gebruik zijn. De route is: activiteit->act2aut->role2act-person2role->person->ou.
Met name de laatste inner join wordt als niet plezierig ervaren want dan kom ik niet tot resutlaat. Al ik de OU-tabel niet gebruik dan is no issue, maar tja ik heb die laatste tabel net nodig voor aanvullende info wat daar in staat.
Na zo'n 10 minuten pollen forceer ik dan maar weer 'n herstart van mijn wampserver. Kan dit ook bijv ook liggen aan Wampserver of is die conclusie te voorbarig?

Toevoeging op 12/12/2020 10:04:56:

Thxn 4 the input en voor het meedenken. Geldt voor iedereen die met me meedenkt. Ben hier eens voorzicht mee aan het experimenteren geweest maar ik loop tegen een performance (?) issue aan denk ik die ik eerst moet zien te tacklen.

Om de soll-positie te kunnen vaststellen dien ik gebruik te maken van een autorisatietabel met liefst 5 inner joins om te kunnen bepalen door wie en waar deze in gebruik zijn. De route is: activiteit->act2aut->role2act-person2role->person->ou.
Met name de laatste inner join wordt als niet plezierig ervaren want dan kom ik niet tot resutlaat. Al ik de OU-tabel niet gebruik dan is no issue, maar tja ik heb die laatste tabel net nodig voor aanvullende info wat daar in staat.
Na zo'n 10 minuten pollen forceer ik dan maar weer 'n herstart van mijn wampserver. Kan dit ook bijv ook liggen aan Wampserver of is die conclusie te voorbarig?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

12/12/2020 19:23:38
Quote Anchor link
- DHU - op 08/12/2020 21:40:42:
Wederom is mijn dank groot voor het aandragen van de code... maar ook blijf de browser maar pollen en komt er geen resultaat op scherm.

- DHU - op 12/12/2020 09:57:51:
Met name de laatste inner join wordt als niet plezierig ervaren want dan kom ik niet tot resutlaat. Al ik de OU-tabel niet gebruik dan is no issue, maar tja ik heb die laatste tabel net nodig voor aanvullende info wat daar in staat.

Die tabel stond ook niet in het voorbeeld wat ik gaf, heb je die zelf alsnog toegevoegd?
Want als die de veroorzaker is van het perfomance probleem:
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
21
22
23
SELECT x.*, idm_ou.Z_ORG_DN
FROM
    (SELECT
        idm_person.REF_OU,
        COUNT(DISTINCT idm_person2role.MSKEYVALUE_MEDEWERKER) soll,
        COUNT(DISTINCT ist_user2aut_swift_productie_cea.gebruikersnaam) ist
    FROM
        idm_autorisatie
    INNER JOIN
        idm_act2aut ON idm_act2aut.MSKEYVALUE_AUTORISATIE = idm_autorisatie.MSKEYVALUE_AUTORISATIE
    INNER JOIN
        idm_role2act ON idm_role2act.MSKEYVALUE_ACTIVITEIT = idm_act2aut.MSKEYVALUE_ACTIVITEIT
    INNER JOIN
        idm_person2role ON idm_person2role.MSKEYVALUE_ROL = idm_role2act.MSKEYVALUE_ROL
    RIGHT JOIN
        idm_person ON idm_person.MSKEYVALUE_MEDEWERKER = idm_person2role.MSKEYVALUE_MEDEWERKER
            AND idm_autorisatie.MSKEYVALUE_DOELSYSTEEM = 'waarde van $_GET'
    LEFT JOIN
        ist_user2aut_swift_productie_cea ON  idm_person.ACCOUNTNAME = ist_user2aut_swift_productie_cea.gebruikersnaam
    GROUP BY
        idm_person.REF_OU) x
INNER JOIN
    idm_ou On idm_ou.MSKEYVALUE_OU = x.REF_OU

Door de OU-tabel uit de group by te halen kan je een hoop winst boeken.
Gewijzigd op 13/12/2020 10:59:25 door Ger van Steenderen
 

Pagina: 1 2 volgende »



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.