INNER JOIN drie tabellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Backend developer

Functie omschrijving Ben jij graag bezig met de back-end van applicaties? Zou je dit graag willen doen voor een kleine werkgever waar ook tijd is voor een drankje op zijn tijd? Je taken hierbij zullen bestaan uit: Gebruik maken van de volgende technieken: .NET (core), C#, SQL, XML, MVC, JSON, REST & SOAP API. Gebruik maken van de volgende tools: Visual Studio, GIT, Jira, Jenkins. Bovengenoemde technieken en tools ga je gebruiken om: Nieuwe functionaliteiten te ontwikkelen. Wijzigingsverzoeken van klanten uitvoeren. Verzorgen van koppelingen tussen data. Bedrijfsprofiel Jouw nieuwe werkgever bevindt zich in regio Raamdonksveer en bieden oplossingen op gebied

Bekijk vacature »

Backend Developer Integraties API HBO REST

Samengevat: Deze werkgever is een IT-consultancy. Wil jij werken als Backend Developer Integraties? Heb jij kennis van gangbare berichtformaten? Vaste baan: Backend Developer Integraties API HBO €3.100 - €4.400 Zij bieden innovatieve oplossingen die bedrijven efficiënter en wendbaarder maken, waardoor onze klanten zich net zo snel kunnen ontwikkelen als de business van hen vraagt. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om de inzet van technologie. Deze werkgever staat open voor elke nieuwe trend. Onze systemen zijn groot en ingewikkeld. Hou jij van diepgang

Bekijk vacature »

Java Developer

Java Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

Frontend Developer Vue Nuxt HBO Javascript

Samengevat: Deze werkgever levert elke dag betere digitale gebruikerservaringen. Ben jij geschikt als frontend Developer? Heb je ervaring met Vue en Nuxt? Vaste baan: Front-End Developer HBO €3.100 - €4.600 Zij bieden opdrachtgevers een complete dienstverlening op gebied van ontwerpen en ontwikkelen van websites, zoekmachine optimalisatie, online adverteren, content marketing en conversie verbetering. Zij werken met een eigen ontwikkeld CMS. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om de inzet van technologie. Deze werkgever staat open voor elke nieuwe trend. Onze systemen zijn groot

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

Bekijk vacature »

Junior Software developer

Functie Als junior .NET ontwikkelaar start jij in een compact team met drie ervaren .NET ontwikkelaars. Wij werken op projectbasis en begeleiden zelf het hele traject van A tot Z. Wij bieden jou dan ook een brede functie aan met veel technische uitdaging! Ons traject ziet er als volgt uit: 1) Wij analyseren de behoefte van onze klant 2) Wij werken de behoefte uit en vertalen dit naar technische werkzaamheden en maken een uren/kosten schatting; 3) Wij gaan aan de slag met het ontwikkelen van het product met directe feedback van de klant, zodat datgene gerealiseerd wordt, wat gewenst is;

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Rotterdam! Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Binnen deze rol houdt jij je met het volgende bezig: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

SAP ABAP Developer

Dit ga je doen Software ontwikkeling met behulp van o.a. ABAP, Sapscript en Smartforms Maatwerk development op SAP ECC 6.0, in de toekomst S/4 HANA Samenwerken met Business Analisten die functioneel en technisch ontwerpen aanleveren Testen van opgeleverde software Bugfixing Ondersteuning van eindgebruikers Hier ga je werken Onze klant, een internationaal gevestigd productiebedrijf dat mensen blij maakt, is ter versterking op zoek naar een ABAP Developer voor hun SAP team. Het team van 4 mensen verzorgt de ontwikkeling van maatwerk voor de SAP omgeving waar wordt gewerkt met modules SD, FI/CO, PM en MM. Momenteel draait het bedrijf op SAP

Bekijk vacature »

Microsoft Acess Developer

Functieomschrijving Wat ga je doen? Heb jij ongeveer 3 jaar ervaring als Software Developer, en komen de volgende kennisgebieden jou niet vreemd voor: MS Acces, C# & SQL? Vind jij het daarnaast leuk om maatwerk software te ontwikkelen voor klanten in een bijzondere branche? Lees dan snel verder! Als developer ben jij samen met een gemotiveerd team van 10 collega’s verantwoordelijk voor het creëren van aangemeten software voor klanten. Je bent klantvriendelijk en oplossingsgericht ingesteld, omdat het essentieel is om de klanten zo goed mogelijk te helpen met hun uitdagingen. Het is mogelijk om vanuit huis je werkzaamheden uit te

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Back-end developer (Magento2)

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Oracle Apex Developer

Dit ga je doen Jouw taken bestaan uit: Het bouwen maatwerk Oracle applicaties voor Europese business units; Het implementeren van de nieuwste technieken om te blijven innoveren; Actief meedenken en aandragen van verbetervoorstellen. Hier ga je werken Deze organisatie in de regio Veenendaal is een van wereld grootste retailers met ruim 16.000 winkels in 27 markten en jaarlijks ruim 5,3 miljard klanten die winkelen bij een van hun welbekende retailmerken. Binnen de organisatie is er een IT Group actief die dient als IT Service Provider voor de hele organisatie en waar dagelijks IT'ers werken aan state-of-the-art IT oplossingen. Dit doen

Bekijk vacature »

Team Lead Java Developer

Functie Wat ga je doen als Java developer? Als Team Lead Java Developer draag een grote verantwoordelijk je stuurt ontwikkelaars aan en staat dagelijks in contact met jou ICT Manager. De team Bestaat uit front-end en backend systemen. Je ben in staat op hoog niveau de technische vak te bepalen en ook te bewaren. Je dag zie er als volgt uit, ontwikkelen van nieuwe en bestaande applicaties, het uitvoeren van processen en analyses en het beschrijven van functioneel ontwerpen. Ook zal samen met jouw Tester applicaties gaan testen door middel van peer reviews en het leveren van support aan gebruikers

Bekijk vacature »
- DHU -

- DHU -

04/02/2019 22:21:51
Quote Anchor link
Hoi jongens.. ik wederom experts nodig. Het kan nog gekker. Ik leer op deze manier steeds een beetje bij (dat is dan de positieve kant).. Andere kant is het een beetje vervelend om jullie te moeten lastig valllen.. Maar ik heb weer een avondje zitten te sleutelen aan een nieuwe functie.. Dit keer data uit twee tabellen en een koppeltabel. Ben de hele avond zitten te proberen om dit voor elkaar te krijgen.. Oom Goegel brengt met me ook niet veel veder..

Hieronder de wat ik nu heb. (uiteraard niet werkend).. de HAM vraag is hoe gaat het me lukken dat ik het wel werkend krijg? Kan iemand mij helpen hiermee aub?

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
function person2role (){
        global $connection;
        
        $where = NULL;
        if (isset($_GET['asn'])){
            $where  = 'MSKEYVALUE_MEDEWERKER = "'.mysqli_real_escape_string($connection, $_GET['asn']).'"';
        }
        
        $sqlUitlezen = mysqli_query($connection, $sql = "
        SELECT
            person.*,
            role.*,
            person2role.*
        FROM
            person
        INNER JOIN
            person2role
        ON
            person.MSKEYVALUE_MEDEWERKER = person2role.MSKEYVALUE_MEDEWERKER
        INNER JOIN
            role
        ON
            person2role.MSKEYVALUE_ROL = role.MSKEYVALUE_ROL
        WHERE
        ".$where."
        ");
        
        echo '<b>$where:</b> '.$where;
        echo '<br>';
        echo '<b>$sql :</b> '.$sql;
        
        $sqlAantal = mysqli_num_rows($sqlUitlezen);
        
        if ($sqlAantal > 0){
            echo '<article>';
            echo '<table id="customers">';
            echo '    <tr>';
            echo '    <td colspan="4" align="right"><h3>Aantal medewerkers binnen deze OU ('.$sqlAantal.') ';
            echo '    </tr>';
            echo '  <tr>';
            echo '    <th><h4>ASN</h4></th>';
            echo '    <th><h4>Rol</h4></th>';
            echo '    <th colspan="2" nowrap><h4>Geldig tot</h4></th>';
            echo '  </tr>';
            
            while ($sqlData = mysqli_fetch_assoc($sqlUitlezen)){    
            
            echo '  <tr>';
            echo '    <td><h6>'.$sqlData['MSKEYVALUE_MEDEWERKER'].'</h6></td>';
            echo '    <td><h6>x</h6></td>';
            echo '    <td><h6>x</h6></td>';
            echo '    <td align="center">
                        <table border="0" cellpadding="0" cellspacing="0">
                            <tr>
                            <!--
                            <td><img src="../img/icon-rollen.png" height="20" title="Rollen"></td>
                            -->
                            <td><A HREF="javascript:javascript:history.go(-1)"><img src="../img/icon-pagina-terug.png" height="12" title="Vorige pagina"></a></td>
                            
                            </tr>
                        </table>
                    </td>';
            echo '  </tr>';
            }
            echo '</table>';
            echo '</article>';
        }else{
            echo '<h4>Sorry, ik kan geen medewerker-rolkoppeling vinden!</h4>';
        }
    }


Alvast bedankt voor het meedenken.
 
PHP hulp

PHP hulp

05/11/2024 15:57:04
 
- Ariën  -
Beheerder

- Ariën -

04/02/2019 22:28:28
Quote Anchor link
Wat krijg je er nu dan uit? En wat verwacht je?
Laat anders even een uitvoer van MySQL zien.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/02/2019 22:50:09
Quote Anchor link
Indien $_GET['asn'] niet bestaat heb je in ieder geval een WHERE-clause zonder iets erachter, dus dat gaat uberhaupt niet werken.

En inderdaad, wat verwacht je dat er zou moeten gebeuren en wat gebeurt er daadwerkelijk en hoe verschilt dit van elkaar.
 
- DHU -

- DHU -

05/02/2019 18:35:45
Quote Anchor link
Hoi mannen,

Ik zal een poging ondernemen ;-)

Wat ik als gewenste resultaat zo willen dat ik van persoon (willekeurig geselecteerd uit een lijst op basis van ASN (dit is een uniek nummer... je kan het vergelijk met een BSN nr die we allemaal hebben).
Wanneer ik de op die persoon klik dan ziet de link er als volgt uit:

http://000.000.000.00/bp/members/index.php?actie=person2role&asn=100.005.813

Ik roep dan de functie person2role (die hierboven staat) aan waarbij criteria dat asn is.

Ik zou verwachten dat ik dan een overzicht krijgt van die persoon (tabel person) met welke rollen (tabel role) via het koppeltabel (person2role) in bezit heeft.

de velden waarop gematched kan worden is:

tabel person:
MSKEYVALUE_MEDEWERKER

tabel person2role:
MSKEYVALUE_MEDEWERKER en
MSKEYVALUE_ROL

tabel role:
MSKEYVALUE_ROL

Naar mijn idee zou het moeten lukken om een overzicht te genereren. Maar dit is voor nog ietwat aan de hoge kant blijkt.. In ieder geval ik kom er na 2 avondjes puzzelen nog niet tot het gewenste resultaat.

Ik denk dat ik het redelijk heb omschreven... misschien ook niet niet maar dat verneem ik dan graag.

Wederom een bedankje op zijn plaats voor de harde meedenkers

Nog ter aanvulling... wanneer ik echo $Where; an en echo $sql; uitvoer is krijgt ik het volgende:

$where: MSKEYVALUE_MEDEWERKER = "100.005.813"

$sql : SELECT person.MSKEYVALUE_MEDEWERKER FROM person INNER JOIN person2role ON person.MSKEYVALUE_MEDEWERKER = person2role.MSKEYVALUE_MEDEWERKER WHERE MSKEYVALUE_MEDEWERKER = "100.005.813"
Gewijzigd op 05/02/2019 19:59:25 door - DHU -
 
Ward van der Put
Moderator

Ward van der Put

05/02/2019 18:55:46
Quote Anchor link
Als je de persoon al weet en je alleen zijn/haar rollen wilt weten, moet je de query uitvoeren vanuit de tabel person2role.

Je functie doet daarnaast veel te veel: person2role() zou person2role($asn) met een parameter voor de ID moeten zijn, om te beginnen.
 
- DHU -

- DHU -

05/02/2019 19:14:55
Quote Anchor link
Ward van der Put op 05/02/2019 18:55:46:
Als je de persoon al weet en je alleen zijn/haar rollen wilt weten, moet je de query uitvoeren vanuit de tabel person2role.

Je functie doet daarnaast veel te veel: person2role() zou person2role($asn) met een parameter voor de ID moeten zijn, om te beginnen.


Hoi Ward... klopt... uiteraard wil ik nog wel aanvullende gegevens uit de tabel person trekken wanneer eenmaal de verbinding ligt.
 
Thomas van den Heuvel

Thomas van den Heuvel

05/02/2019 21:45:29
Quote Anchor link
Indien een persoon meerdere rollen kan vervullen zou ik een LEFT JOIN verwachten op person2role. En dan zijn er wellicht nog wat randgevallen zoals personen die geen rollen hebben? Of dat deze niet actief ("verwijderd") zijn uit het systeem (WHERE ... person.deleted = 0, is wellicht nog een handige toevoeging in de functionaliteit). En dan zul je dus nog de kolomwaarden moeten opvragen in de SELECT om deze weer te geven.

Waar strandt het schip precies?

En wat @Ward zegt, indien je hier een functie van bakt zorg dan dat deze herbruikbaar is (gebruik parameters). Mogelijk zou deze functie eigenlijk alleen een array met data moeten teruggeven, het weergeven hiervan is een aparte taak die ergens anders -met behulp van deze functie- uitgevoerd kan worden.
 
- DHU -

- DHU -

05/02/2019 22:51:53
Quote Anchor link
tuut tuut tuut... bovenstaande is voor mij nog niet begrijpbaar sorry..

Met onderstaande code krijg ik een overzicht welke persoon welke rollen heeft.

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
function person2role (){
        global $connection;
        
        $where = NULL;
        if (isset($_GET['asn'])){
            $where  = 'WHERE person.MSKEYVALUE_MEDEWERKER = "'.mysqli_real_escape_string($connection, $_GET['asn']).'"';
        }
        $sqlUitlezen = mysqli_query($connection, $sql = "
            SELECT
                person.*,
                person2role.*
            FROM
                person
            LEFT JOIN
                person2role
            ON
                person.MSKEYVALUE_MEDEWERKER = person2role.MSKEYVALUE_MEDEWERKER
            ".$where."                
            ORDER BY
                person.MSKEYVALUE_MEDEWERKER ASC            
            ");


maar hiermee kan ik dus geen aanvullende informatie halen want de 3e tabel `role` ontbreekt. Het lukt me niet om een 2 JOIN toe te voegen want dan krijg ik de foutmelding die hierboven al zijn beschreven.

Thomas tipt daar nog een goed punt aan. Er zullen personen zijn die geen rol hebben gekoppeld. Maar hoe krijg ik die inzichtelijk. Is dat een andere query of kan/moet dat in deze mee worden genomen?
 
Thomas van den Heuvel

Thomas van den Heuvel

06/02/2019 00:42:49
Quote Anchor link
Hm, oke. Dus even een aantal zaken op een rij.

Een persoon heeft 0 of meer rollen. Klopt dit?

Je gebruikt het ASN ook als intern gebruikers-id, ik hoop dat je je database ook echt relationeel hebt opgezet?
Normaal gesproken wordt het personeelsnummer (ASN) vaak nog vertaald naar een soort van intern gebruikers-id, wat gewoon een auto-increment veldje (oplopend nummer) is. Dit lijkt mij voor indexering (levert je snellere queries op) en interne consistentie beter. Maar goed. Als je overal dat ASN gebruikt dan kun je in principe person2role als uitgangspunt nemen... ware het niet dat het ook voor kan komen dat iemand geen rol heeft. Dus voor nu maar person als uitgangspunt.

Snap je het verschil tussen een LEFT JOIN en een INNER JOIN?
person2role bevat in principe geen nieuwe informatie, dit is slechts een koppeltabel, dus daar hoef je geen informatie uit op te halen lijkt mij? Wat heb je nodig uit de role-tabel? Zijn dit enkel de labels van de concrete rollen? Volgens mij kom je een eind als je zoiets doet:

SELECT <informatie die je wilt hebben>
FROM person
LEFT JOIN person2role ON person2role.MSKEYVALUE_MEDEWERKER = person.MSKEYVALUE_MEDEWERKER
LEFT JOIN role ON role.MSKEYVALUE_ROL = person2role.MSKEYVALUE_ROL
WHERE person.MSKEYVALUE_MEDEWERKER = <ASN>

Een LEFT JOIN op person2role en role omdat het niet gegarandeerd is dat iedereen een rol heeft.

Vervolgens zal je in een loopje de resultaten moeten uitlezen waarbij je moet controleren of informatie in person2role (en role) verschilt van NULL - het kan namelijk voorkomen dat iemand geen rol toegewezen heeft gekregen. De LEFT JOIN zorgt er dan voor dat wel informatie over de desbetreffende persoon wordt opgehaald, maar de ontbrekende informatie (in person2role en role) wordt bij afwezigheid opgevuld met NULL-waarden. Zou je een INNER JOIN gebruiken krijg je de person niet als resultaat retour.

Je zou ook nog iets met GROUP_CONCAT kunnen doen als je dat leuker vindt.

Bijbehorende testjes:
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
# gebruikers tabel
CREATE TABLE test_a (
a_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
a_text VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# koppeltabel
CREATE TABLE test_a_b (
a_id INT(10) UNSIGNED NOT NULL,
b_id INT(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# rechten tabel
CREATE TABLE test_b (
b_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
b_text VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# relaties tussen de tabellen, verwijder corresponderende gebruiker of recht als tegenhanger verdwijnt
ALTER TABLE test_a_b ADD FOREIGN KEY (a_id) REFERENCES test_a(a_id) ON DELETE CASCADE;
ALTER TABLE test_a_b ADD FOREIGN KEY (b_id) REFERENCES test_b(b_id) ON DELETE CASCADE;

# voeg gebruiker 1 toe
INSERT INTO test_a (a_text) VALUES ('user 1');

# voeg rechten toe
INSERT INTO test_b (b_text) VALUES ('role 1'), ('role 2');

# gebruiker 1 heeft twee rechten
INSERT INTO test_a_b (a_id, b_id) VALUES (1, 1), (1, 2);

# vraag alles op van gebruiker 1
SELECT a.a_id, a.a_text, b.b_id, b.b_text
FROM test_a a
LEFT JOIN test_a_b ab ON (ab.a_id = a.a_id)
LEFT JOIN test_b b ON (b.b_id = ab.b_id)
WHERE a.a_id = 1;

# gebruiker zonder rechten
INSERT INTO test_a (a_text) VALUES ('user 2');

# vraag alles op van gebruiker 2
SELECT a.a_id, a.a_text, b.b_id, b.b_text
FROM test_a a
LEFT JOIN test_a_b ab ON (ab.a_id = a.a_id)
LEFT JOIN test_b b ON (b.b_id = ab.b_id)
WHERE a.a_id = 2;

# alle rollen in 1 rij gescheiden door komma's
SELECT a.*, GROUP_CONCAT(b.b_text) AS rollen
FROM test_a a
LEFT JOIN test_a_b ab ON (ab.a_id = a.a_id)
LEFT JOIN test_b b ON (b.b_id = ab.b_id)
WHERE a.a_id = 2
GROUP BY a.a_id;
Gewijzigd op 06/02/2019 00:51:32 door Thomas van den Heuvel
 
- DHU -

- DHU -

06/02/2019 19:24:28
Quote Anchor link
Hoi Thomas,

Het kan inderdaad voorkomen dat een persoon geen rollen heeft gekoppeld. Dit zou betekenen dat hier actie op gezet moet worden. Dus het is goed dat het inzichtelijk wordt.

ASN is inderdaad de sleutelveld als het gaat om personen. Dit is gegeven en wijzigt verder niet.
Het verschil tussen LEFT en INNER JOIN wordt me nu wel stukken duidelijker. Nooit zo bij stil gestaan. Maar de LEFT variant is idd beter voor gebruik.

Met SELECT voorbeeld is het me gelukt om de koppelingen te leggen en de informatie uit zowel person en role tabel. Als ik het zo zie simpel :-) maar als ik het bedenken moet kom er na 2 avonden niet uit.. TOP MAN. THANKS.

Ik snap niet wat je bedoeld met GROUP_CONCAT hoor... Eens oom Goegel eens vragen.
Moet ik nog wat met die testjes doen dan?
 
Thomas van den Heuvel

Thomas van den Heuvel

06/02/2019 19:46:38
Quote Anchor link
Met de normale select haal je sommige data meerdere keren op in meerdere records (de person data wordt herhaald). Indien je group_concat() gebruikt kun je het aantal opgehaalde records reduceren tot één.

Je hoeft in principe niets te doen met de testjes, maar deze illustreren goed wat er allemaal gebeurt in termen van queryresultaten.
 



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.