Avatar billede Slettet bruger
24. september 2012 - 17:04 Der er 3 kommentarer og
1 løsning

JOIN flere ting med samme navn

Hejsa!

Jeg er ikke alt for skarp til MySQL og er løbet ind i et problem.
Er ved at lave en lille oversigt over nogle NFL kampe.

Jeg har to tabeller


1: nfl_game_info: indeholder info om de forskellige kampe, den har søjlerne
    id, team1, team2, score1, score2, url, status
   
    note: team1 og team2 indeholder byerne på de hold der spiller

2: nfl_teams: indeholder referencer mellem de forskellige holds navn og hvilken by de kommer fra, tabellen har søjlerne
    id, city, name
   
Jeg vil nu gerne joine nfl_teams således at får navnet med på de 2 hold der spiller hver kamp.
Det er lykkedes mig at få det ene navn med, med følgende kode:

SELECT i.team1, i.team2, i.score1, i.score2, i.url, i.status, t.name FROM nfl_game_info AS i
    LEFT JOIN nfl_teams AS t ON (i.team1=t.city)
   
Jeg vil derimod gerne gøre noget ligende

SELECT i.team1, i.team2, i.score1, i.score2, i.url, i.status, t.name FROM nfl_game_info AS i
    LEFT JOIN nfl_teams AS t ON (i.team1=t.city AND i.team2=t.city)
   
Men dette virker bare ikke og jeg kan godt se problemet i at der er to ting der hedder det samme. Har i nogen råd til hvordan jeg kan løse dette? Har jeg struktureret min database forkert? Og husk at pointen var kun at lave en forespørgsel.

På forhånd tak :D
24. september 2012 - 17:23 #1
Du skal joine nfl_game_info med nfl_teams to gange og give nfl_teams forskellig alias hver gang, såsom (ikke testet)

SELECT i.team1, i.team2, i.score1, i.score2, i.url, i.status, t1.name AS name1, t2.name AS name2
FROM nfl_game_info AS i
JOIN nfl_teams AS t1 ON i.team1=t1.city
JOIN nfl_teams AS t2 ON i.team2=t2.city
Avatar billede Slettet bruger
24. september 2012 - 17:35 #2
Mange tak for det hurtige svar!

Det virker upåklageligt, havde ikke lige fanget at man kunne bruge aliaser på den måde.

Smid et svar :D
Avatar billede Slettet bruger
24. september 2012 - 17:37 #3
Forresten så skal det vist være LEFT JOIN, ellers virker det ikke helt efter hensigten!
24. september 2012 - 17:41 #4
Iøvrigt ville jeg foreslå, at nfl_game_info tabellen indeholder id'en for de deltagende teams i stedet for byens navn.  Så vil du også kunne håndtere det, hvis der nu er flere teams fra en by. 

Lad os forestille, at tabellen ser sådan ud:

nfl_teams
id  city      name
1  Odense  All Stars
2  Assens  Superplayers
3  Nyborg  Storebælt Teamet
4  Odense  De nye

Hvis så nfl_game_info i 'søjlerne' team1 og team2 har team id'er i stedet for byer, og de to Odense teams har spillet mod hinanden, så vil rækken i nfl_game_info for eksempel se sådan ud:

nfl_game_info
id team1 team2 score1 score2 ....
1        1        4        5        2

Så vil du med denne query:

SELECT t1.city, t1.name, i.score1, t2.city, t2.name, i.score2

få dette resultat:

Odense  All Stars  5  Odense De nye  2

LEFT JOIN versus JOIN:  Hvis alle team1 og team2 værdier i nfl_game_info har tilsvarende værdier i nfl_teams, så skulle det ikke være nødvendigt at bruge LEFT JOIN.  Men du kan da altid bruge det for en sikkernedsnåls skyld.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester