Voor de muziekvereniging waar ik al jaren bijzit heb ik een administratie in Access opgezet. Nu wil ik die langzamerhand porteren naar een afgeschermde webomgeving. Niet iedereen heeft immers Access en bovendien is er dan ook veel meer mogelijk met koppelingen aan de website e.d.
Nu kom ik niet uit een query.
De situatie is als volgt. Er zijn drie tabellen: Adresgegevens, Functies en Functie-aan-Lid en wel als volgt:
Adresgegevens
Functies
Functie-aan-lid
Functie-aan-lid is een tabel voor 1-op-n relaties. Een lid kan een of meer functies hebben (aantal is onbepaald, maar minimaal 1).
Wat ik nu wil doen is etiketten printen, waarbij de functie van de persoon vermeld staat. Uiteraard is een etiket per persoon voldoende. Aangezien Functie-aan-lid een 1-op-n relatietabel is, is het dus zaak te groeperen op Achternaam e.d. en daarmee slechts een (1) functie te tonen.
Dat is niet zo moeilijke. Nu komt het deel waar ik niet uit kom. Om logistieke redenen wil ik de Functie van het lid tonen die het laagste getal heeft bij Volgorde.
Dus even praktisch uitgedrukt: stel dat een lid in de tabel Functie-aan-lid gekoppeld is aan alle functies, dan moet op het etiket de functie 'Malletband' vermeld worden. Die functie heeft immers het laagste getal bij Volgorde staan.
Voor wie denkt, waarom is dit nodig? Nou, met een vereniging die op allerlei locaties repetities e.d. houdt is het handig om de boekjes te kunnen groeperen op die locaties. Bovendien leert de ervaring dat zo niet alles locaties afgegaan hoeven te worden (leden zijn vaak naast andere onderdelen ook wel lid van een onderdeel dat op meer generieke locatie repeteert).
In Access had ik hiervoor altijd twee query's nodig (de 2e bouwde voort op de 1e), maar dit wil niet in phpmyadmin.Toch heb ik het idee dat het wat ik wil best moet kunnen in MySQL.
Ik heb allerlei variaties op het onderstaande geprobeerd, maar kom helaas niet verder. Wie geeft me de gerichte hint? Alvast heel erg bedankt!
Nu kom ik niet uit een query.
De situatie is als volgt. Er zijn drie tabellen: Adresgegevens, Functies en Functie-aan-Lid en wel als volgt:
Adresgegevens
LidID | Voornaam | etc.... |
1 | Mark | blabla |
Functies
FunctieID | Functie | Volgorde |
1 | A-orkest | 2 |
2 | B-orkest | 3 |
3 | Malletband | 1 |
Functie-aan-lid
ID | LidID | FunctieID |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
Functie-aan-lid is een tabel voor 1-op-n relaties. Een lid kan een of meer functies hebben (aantal is onbepaald, maar minimaal 1).
Wat ik nu wil doen is etiketten printen, waarbij de functie van de persoon vermeld staat. Uiteraard is een etiket per persoon voldoende. Aangezien Functie-aan-lid een 1-op-n relatietabel is, is het dus zaak te groeperen op Achternaam e.d. en daarmee slechts een (1) functie te tonen.
Dat is niet zo moeilijke. Nu komt het deel waar ik niet uit kom. Om logistieke redenen wil ik de Functie van het lid tonen die het laagste getal heeft bij Volgorde.
Dus even praktisch uitgedrukt: stel dat een lid in de tabel Functie-aan-lid gekoppeld is aan alle functies, dan moet op het etiket de functie 'Malletband' vermeld worden. Die functie heeft immers het laagste getal bij Volgorde staan.
Voor wie denkt, waarom is dit nodig? Nou, met een vereniging die op allerlei locaties repetities e.d. houdt is het handig om de boekjes te kunnen groeperen op die locaties. Bovendien leert de ervaring dat zo niet alles locaties afgegaan hoeven te worden (leden zijn vaak naast andere onderdelen ook wel lid van een onderdeel dat op meer generieke locatie repeteert).
In Access had ik hiervoor altijd twee query's nodig (de 2e bouwde voort op de 1e), maar dit wil niet in phpmyadmin.Toch heb ik het idee dat het wat ik wil best moet kunnen in MySQL.
Ik heb allerlei variaties op het onderstaande geprobeerd, maar kom helaas niet verder. Wie geeft me de gerichte hint? Alvast heel erg bedankt!
SQL:
1
2
3
4
5
6
7
8
9
| SELECT `functie-aan-lid`.FunctieID, adresgegevens.Voornaam, adresgegevens.tv, adresgegevens.ACHTERNAAM FROM ( adresgegevens INNER JOIN `functie-aan-lid` ON adresgegevens.LidID = `functie-aan-lid`.LidID ) INNER JOIN functies ON `functie-aan-lid`.FunctieID = functies.FunctieID GROUP BY adresgegevens.Voornaam, adresgegevens.tv, adresgegevens.ACHTERNAAM ORDER BY Achternaam, Voornaam LIMIT 0 , 30 |