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.
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.