Toon posts:

[MYSQL] Data uitlezen met een JOIN?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben sinds kort begonnen met sql en heb dan ook een erd (http://imgur.com/azPQV9i) gemaakt in MySQLWorkbench en dit model doorgevoerd en voorzien van data in de verschillende tabellen.

Nu wil ik graag het volgende met een JOIN en volgens mij een ORDER BY kunnen doen:
Het uitlezen van het aantal nummers van een artiest in een afspeellijst.

Ik hoop dat iemand me hiermee kan helpen, want ik ben al een week aan het zoeken maar ik snap volgens mij iets niet wat in de basis volgens mij vrij simpel is. :-(

Beste antwoord (via Verwijderd op 10-02-2016 00:13)


  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 16:59

Pinobigbird

doesn't share food!

Als je een aantal wil heb je COUNT() en GROUP BY nodig.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    asl.naam AS afspeellijst_naam
    , art.naam AS artiest_naam
    , COUNT(n.ID) AS aantal_nummers
FROM afspeellijst AS asl 
INNER JOIN uitvoering_afspeellijst AS uasl ON asl.ID = uasl.afspeellijst_ID
INNER JOIN uitvoering AS u ON uasl.uitvoering_ID = u.ID
INNER JOIN nummer AS n ON u.nummer_ID = n.ID
INNER JOIN uitvoering_artiest AS ua ON u.ID = ua.uitvoering_ID
INNER JOIN artiest AS art ON ua.artiest_ID = art.ID
GROUP BY
    asl.naam
    , art.naam
ORDER BY
    asl.naam ASC
    , art.naam ASC
;


Overigens kan je uitvoering_nummer_ID weglaten uit je model.

[edit]
Ik denk dat je in je overzicht niet het aantal nummers, maar het aantal uitvoeringen wil weten. Je hebt de JOIN met nummer dan niet nodig, en je zet in je SELECT dan COUNT(u.ID).

Verder houd je geen rekening met de mogelijkheid dat een artiest in 0, 1 of meerdere bands kan zitten. Bijvoorbeeld de artiest Michael Jackson had solo-uitvoeringen, maar ook als lid van de band The Jackson 5 en The Jacksons. Dit zijn drie verschillende entries in artiest_bandlid, waarbij in de solo-uitvoering artiest_bandlid.bandlid_ID = NULL. Vanuit uitvoering_artiest moet je linken naar artiest_bandlid_ID i.p.v. artiest_ID.
Eigenlijk moet het overal niet bandlid zijn, maar band, en moet bandlid.rol naar artiest_band.rol.

[ Voor 40% gewijzigd door Pinobigbird op 10-02-2016 00:16 ]

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt

Alle reacties


Acties:
  • 0 Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

Je hebt een tabel 1 met een key die overeen komt met een key in tabel twee. En je hebt een query met een join waarin beide keys staan.

Hoe wil je dat wij je nu een ander antwoord gaan geven op je vraag, met de info die je geeft, dan de zoekresultaten die je hebt gekregen toen je zocht op MySQL join.

👑


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 16:59

Pinobigbird

doesn't share food!

Als je een aantal wil heb je COUNT() en GROUP BY nodig.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    asl.naam AS afspeellijst_naam
    , art.naam AS artiest_naam
    , COUNT(n.ID) AS aantal_nummers
FROM afspeellijst AS asl 
INNER JOIN uitvoering_afspeellijst AS uasl ON asl.ID = uasl.afspeellijst_ID
INNER JOIN uitvoering AS u ON uasl.uitvoering_ID = u.ID
INNER JOIN nummer AS n ON u.nummer_ID = n.ID
INNER JOIN uitvoering_artiest AS ua ON u.ID = ua.uitvoering_ID
INNER JOIN artiest AS art ON ua.artiest_ID = art.ID
GROUP BY
    asl.naam
    , art.naam
ORDER BY
    asl.naam ASC
    , art.naam ASC
;


Overigens kan je uitvoering_nummer_ID weglaten uit je model.

[edit]
Ik denk dat je in je overzicht niet het aantal nummers, maar het aantal uitvoeringen wil weten. Je hebt de JOIN met nummer dan niet nodig, en je zet in je SELECT dan COUNT(u.ID).

Verder houd je geen rekening met de mogelijkheid dat een artiest in 0, 1 of meerdere bands kan zitten. Bijvoorbeeld de artiest Michael Jackson had solo-uitvoeringen, maar ook als lid van de band The Jackson 5 en The Jacksons. Dit zijn drie verschillende entries in artiest_bandlid, waarbij in de solo-uitvoering artiest_bandlid.bandlid_ID = NULL. Vanuit uitvoering_artiest moet je linken naar artiest_bandlid_ID i.p.v. artiest_ID.
Eigenlijk moet het overal niet bandlid zijn, maar band, en moet bandlid.rol naar artiest_band.rol.

[ Voor 40% gewijzigd door Pinobigbird op 10-02-2016 00:16 ]

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja inderdaad, begint me nu al meer te dagen! Je leest natuurlijk het aantal uitvoeringen uit die in de afspeellijst staan. Bedankt voor de reply!