24. september 2012 - 17:04Der 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.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
Synes godt om
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
Synes godt om
Slettet bruger
24. september 2012 - 17:37#3
Forresten så skal det vist være LEFT JOIN, ellers virker det ikke helt efter hensigten!
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:
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.
Synes godt om
Ny brugerNybegynder
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.