Toon posts:

SQL Query

Pagina: 1
Acties:

Onderwerpen

Vraag


  • EgbertJ
  • Registratie: Februari 2022
  • Laatst online: 24-02-2022
Hi,

Ik heb de volgende tabellen:

Training table:
id title date
1 training1 2022-01-02
2 training2 2021-12-01
3 training3 2020-11-11

User table:
id firstname lastname
1 fn1 ln1
2 fn2 ln2
3 fn3 ln3

TrainingUser table:
id training_id user_id
1 1 1
2 2 1
3 2 2
4 3 1
5 3 2
6 3 3

Een training kan aan 1 of meerdere users/sporters gekoppeld worden.
Is het mogelijk om onderstaande output te genereren met 1 enkel sql commando?
Ik zou zelf niet weten hoe ik dit dan moet doen.

title date users
training1, 2022-01-02, fn1 ln1
training2, 2021-12-01, fn1 ln1#fn2 ln2
training3, 2020-11-11, fn1 ln1#fn2 ln2#fn3 ln3

Alvast bedankt,
Egbert

Alle reacties


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Welkom op GoT :)

Er kan veel veel, maar: we zien toch graag eerst de eigen pogingen / gedachten. Zegmaar het deel dat je bij […] hebt weggeknipt. Al was het omdat je en boel kunt slopen met de verkeerde queries. En omdat het nogal als huiswerk klinkt even zeker dan is het de bedoeling het zelf te doen.

Er zijn veel instructieboeken, tutorials, etc. Ik zou daar mee beginnen. Als je uiteindelijk op een detail vastloopt denken we graag mee.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • D-dark
  • Registratie: Januari 2008
  • Laatst online: 21:34
Als tip

- teken het uit en zet lijnen waar de tabellen elkaar kruizen op waardes die in beiden voorkomen
- Je hebt select volgende waardes from tabel 1, 2, 3 where nodig.
- Query op SQL en Join tabel (Kijk goed welke waardes je aan elkaar kan knopen)
- op papier schrijf van te voren uit wat het select statement voor elke waarde in een tabel is.

  • Drikus70
  • Registratie: Augustus 2009
  • Laatst online: 30-01 22:45
Hier een opzetje dat 1op 1 te kopieren is in db-fiddle

schema sql
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE user (
  id INT,firstname varchar(20),lastname varchar(20)
);
INSERT INTO user (id, firstname,lastname) VALUES (1,'jan','bakker'),(2,'lara','jansen'),(3,'willie','wortel');
CREATE TABLE training (
  id INT,training varchar(20),datum date
);
INSERT INTO training (id, training, datum) VALUES (1,'training1','2022-02-28'),(2,'training2','2022-03-01'),(3,'training3','2022-03-03');
CREATE TABLE planning (
  id INT,trainingid int,userid int
);
INSERT INTO planning (id, trainingid, userid) VALUES 
(1,1,1),(2,2,1),(3,2,2),(4,3,1),(5,3,2),(6,3,3);


query sql
code:
1
2
3
4
5
6
7
8
select
t.training,
t.datum,
concat(u.firstname,' ',u.lastname) as deelnemer
from planning p
left join training t on p.trainingid = t.id
left join user u on p.userid = u.id
order by training;

  • dixet
  • Registratie: Februari 2010
  • Laatst online: 03-02 15:25
Aangezien de TS volgens mij de namen naast elkaar wil, dus 1 rij per training/datum zou ik een GROUP_CONCAT gebruiken in plaats van een gewone CONCAT:
code:
1
2
3
4
5
6
7
8
9
10
select
t.training,
t.datum,
group_concat(u.firstname,' ',u.lastname) as deelnemer
from planning p
left join training t on p.trainingid = t.id
left join user u on p.userid = u.id
GROUP BY t.training,
t.datum
order by training;

Resultaat:
trainingdatumdeelnemer
training12022-02-28jan bakker
training22022-03-01jan bakker,lara jansen
training32022-03-03jan bakker,lara jansen,willie wortel


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee