INNER JOIN drie tabellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ervaren Xamarin / Mobiele App developer bij Randst

Locatie/Standplaats Amsterdam Functieomschrijving Onze missie is het creëren van maximale waarde voor de Randstad Groep Nederland met onze ICT-oplossingen. Jouw inbreng is voor hen van essentieel belang voor een toonaangevende positie op de markt. Jij maakt dus echt het verschil! Randstad Groep IT is op zoek naar een ervaren Xamarin app developer. Als app ontwikkelaar ben je verantwoordelijk voor het bedenken, ontwikkelen en implementeren van apps voor de Randstad Groep Nederland. Onder de Randstad Groep vallen Randstad en Tempo-Team, de nr. 1 en 2. bedrijven van Nederland op het gebied van uitzenden. Ook Yacht, dat zich vooral op de professionals

Bekijk vacature »

VB.NET Ontwikkelaar met kennis van C# omgeving Ams

Functieomschrijving Ben jij C# developer? Vind je het gaaf een inhouse ontwikkelde applicatie in VB.NET om te bouwen in C# en te onderhouden? Dan zijn wij op zoek naar jou! Het bedrijf waar je gaat werken is actief in de export en is internationaal opererend. Op de locatie waar je gaat werken hebben ze een callcenter met agents die klanten over de hele wereld in verschillende talen te woord staan. De in- en verkoop van dit bedrijf wordt ook op deze locatie gedaan. Op dit moment is dit de bloeiendste markt die er is. Jij als C# developer bent erg

Bekijk vacature »

Internationale financiële organisatie zoekt e

Sharepoint developer gezocht voor grote financiële speler Functieomschrijving Wil jij deel uitmaken van een organisatie die graag voorop loopt en hiermee de mooiste SharePoint portals en websites ontwikkelt? Dan kom ik graag met je in contact! Ontwikkelen van applicaties in SharePoint; Medeverantwoordelijk voor de design en architectuur van de applicaties; Kennis die momenteel bij de externe developers ligt intern halen en invoeren binnen de nieuwe afdeling; Je gaat naast de ontwikkeling van portalen en websites voor interne gebruikers ook de externe klantportalen vormgeven en bouwen; Schakelen en sparren met de SharePoint beheerders. Functie-eisen Je hebt aantoonbare ervaring als SharePoint ontwikkelaar;

Bekijk vacature »

Senior C++ Machine Control Developer (Model Driven

Senior C++ Machine Control Developer (Model Driven Engineering) Mathematics, Physics, Production Control, Motion and Control, Linux If you enjoy working on software for complex machinery and have experience with the development of machine controls or production controls, then read on. This position allows you to have a system wide view and interaction on a functional level of the high tech machines of our client. Organisation Our client develops high tech machinery used by companies such as Intel that allow them to develop microchips. You'll be active in a booming industry with expected growth lasting until at least 2025. In close

Bekijk vacature »

Marktleider is op zoek naar PHP Developers!

Functieomschrijving Als ervaren PHP Developer kom je te werken in één van de SCRUM teams waarin je je dagelijks bezig zal houden met het verbeteren van de bestaande software pakketten. Ook ga je meewerken aan het ontwikkelen van nieuwe maatwerk software die per klant gebouwd zal worden. Je gaat hier voldoende ontwikkelingsmogelijkheden krijgen door middel van cursussen en trainingen waarvan je zelf aan mag geven of jij ze relevant vindt voor je toekomst. Functie-eisen - Goede PHP ervaring - Kennis van frameworks zoals Laravel - Communicatief vaardig - Zowel interesse in backend als frontend - HBO werk en denkniveau Bedrijfsomschrijving

Bekijk vacature »

Front-end developer

Bij Airtrade is het heel goed toeven Zodra je ons kantoor in Haarlem binnenwandelt komt de dynamische vibe je direct tegemoet. De geur van verse cappuccino (ja, met échte melk) leidt je via onze goed gevulde pantry naar de ontmoetingsruimte, waar je een praatje maakt met een developer en een IATA-specialist. Ondertussen beginnen je collega's verderop met het eerste potje Mario Kart. Aangekomen bij je werkplek zie je ‘studiereis verloting onder medewerkers’ in je inbox verschijnen. Jij denkt: meedoen! Dit kan ook jouw leven zijn. Bij Airtrade inspireren we onze medewerkers graag; met een fijne werkplek en enthousiaste collega's én

Bekijk vacature »

C# developer binnen prettig en professioneel Agile

Functieomschrijving Je komt te werken binnen een Agile Scrum team bestaande uit 10 personen; een product owner, een scrum master, meerdere ervaren developers en software testers. Samen gaan jullie aan de slag met het optimaliseren van bestaande applicaties en het bouwen van nieuwe. Dit betreffen C# ASP.NET applicaties (MVC, Web API, XML). Hierbij houd je sterk rekening met zaken als betrouwbaarheid en veiligheid. Het is een hecht team dat graag met elkaar spart en kennis deelt. Het is dan ook fijn wanneer je communicatief vaardig bent en het niet schroomt om met verbetervoorstellen te komen en hiermee aan de slag

Bekijk vacature »

Become a Professional Developer in an Output Manag

Functieomschrijving Do you want to become a Developer? Are you eager to design and create innovative and sustainable Enterprise and Output Management solutions? Do you have an exploratory mindset and are you on the lookout for new developments? We are looking for you! In your role as an Output management Developer you will work within one of the most advanced environments in the Amsterdam Area. Your responsibilities will be the following: Designing, developing, testing and deploying new parts and functionalities; Getting the requirements from the business and turning them into technical requirements; Implementing the requirements into templates; Building and expending

Bekijk vacature »

C# .NET Developer

.NET Developer Fulltime Dit is de maand van de goede voornemens en daarom zijn veel mensen op zoek naar iets waarin ze terug kunnen geven aan de maatschappij. Onze goede klant is hier dagelijks mee bezig en is op dit moment op zoek naar twee .NET ontwikkelaars die hiermee kunnen helpen. Dit .Net-ontwikkelingsteam beheert en ontwikkelt een dienst die het mogelijk maakt om alle beschikbare informatie uit gegevensbronnen op te vragen. Deze dienst wordt dagelijks gebruikt door de medewerkers van deze organisatie om snel alle informatie op te vragen. Het is van groot belang dat deze informatie correct, snel, veilig

Bekijk vacature »

Embedded Developer, Amsterdam, smart mobility star

Embedded Developer needed for smart mobility start-up in Amsterdam that are scaling rapidly! The Embedded Developer will be strong with C programming and Micro-controllers. You will be joining a highly skilled and passionate team of 3 Embedded Engineers, Embedded Testers, Mobile Developers and more! Skills as Embedded Developer: Pure C (3+ years experience) Micro-controller programming knowledge Good debugging skills TDD C++ is beneficial Ideally some automative industry expereince bachelor degree ideal, comp science, electrical engineer The Embedded Developer will be joining an international environment, made up of 20 different nationalities working together to create greener, cleaner cities making petrol transportation

Bekijk vacature »

DevOps Engineer

Do you have good understanding of cloud environments such as Azure and AWS? Do you have experience in building and deploying IT Infrastructure automation environments? Than this vacancy might be what you are looking for! The product / concept you will work on With Itility Cloud Control (ICC) we offer a mechanism to simplify the current existing IT landscape for better operations results. We wrap the landscape into software and apply analytics and machine learning to it. We make it software defined. We let the machine handle the complexity instead of the traditional approach of manual labour. Customers can outsource

Bekijk vacature »

Software Ontwikkelaar C#.NET

Software Ontwikkelaar C#.NET Zit het ontwikkelen van innovatieve applicaties in C#.NET, JAVA of PHP in jouw bloed en wil jij je kennis toepassen binnen uitdagende projecten in kantoorautomatisering of industrie. Dan kan MA-IT mogelijk iets voor je betekenen, aangezien wij uitbreiding zoeken in ons IT team van Software Engineer voor onze vestigingen in Deventer, Son en Gorinchem. Functie-eise Software Ontwikkelaar C#.NET Dit is wat je gaat doen Als C#, JAVA of PHP Developer ontwikkel je binnen een SCRUM omgeving, het hart van de producten die (inter)nationaal gebruikt worden. Het betreft complexe software waarbij je op een hoog abstractieniveau software ontwikkelt.

Bekijk vacature »

iOS Developer / Swift / Objective-C / Amsterdam

Functieomschrijving Are you experienced in iOS development? Do you want to work in an international environment? And do you want to work from home or Starbucks? Apply now! Develop various iOS apps from scratch (for smartphones, tablets, and other mobile devices); Enhance existing iOS apps; Provide patching when necessary; Advise both national and international clients and other stakeholders; Being part of and guiding your Scrum team (if needed and wanted). Functie-eisen At least 3 years of work experience as an iOS Developer; Work experience with Objective-C and Swift; Familiar with Restful APIs; Familiar with the full mobile development lifecycle; Excellent

Bekijk vacature »

Mendix Developer

Ben jij iemand die handig is met het modelleren en programmeren van nieuwe applicaties! Dan is dit de baan voor jou!! Functieomschrijving Als Mendix Developer realiseer jij met de opdrachtgever en collega's web- en mobiele bedrijfsapplicaties. Jij bent daarom technische goed onderlegd en hebt affiniteit met het model; Driven Development. Je werkt in een hecht team, multidisciplinair en zelfsturend. Dat betekent dat het team zelfstandig in staat is alle taken van ontwerp, realisatie, testen tot en met de oplevering te verzorgen. Dit gebeurt op een agile-werkwijze. Binnen het team is er ruimte om je te richten op je persoonlijke en

Bekijk vacature »

.NET C# lead developer (Full stack) gezocht, Den H

Voor een organisatie in Den Haag zijn we momenteel op zoek naar een ervaren full stack .NET C# lead developer ter begeleiding van junior .NET developers en het verder uitbouwen van het team. Het gaat om een bedrijf dat de afgelopen 5 jaar druk bezig is geweest om de basis te leggen voor een online platform met betrekking tot de vraag en aanbod van een specifieke maatschappelijke doelgroep. Met een succesvol draaiende website, reeds 50.000 bezoekers per maand en het vertrouwen van een grote investeerder zijn ze de start-up fase inmiddels voorbij. De bedrijfscultuur daarentegen wordt nog steeds gekenmerkt door

Bekijk vacature »
Dirk Huizinga

Dirk Huizinga

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

22/02/2019 20:46:46
 
- 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.
 
Dirk Huizinga

Dirk Huizinga

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 Dirk Huizinga
 
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.
 
Dirk Huizinga

Dirk Huizinga

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.
 
Dirk Huizinga

Dirk Huizinga

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
 
Dirk Huizinga

Dirk Huizinga

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.