Avatar billede system_slayer Nybegynder
06. marts 2011 - 15:40 Der er 7 kommentarer og
2 løsninger

join problem

Jeg forsøger at lave et join med 3 tabeller hvilket jeg ikke helt kan få til at fungere.
Jeg skal ud fra et matchid ha fundet hvilke spillere der har deltaget i en kamp.

Her er tabellerne:

Matches(matchid, date, type)
Members(id, brugernavn)
Matches_players(id, matchid, playerid)

Det jeg forsøger er at joine Matches.matchid på Matches_players.matchid, og bagefter joine Matches_players.matchid på Members.id

Det jeg er kommet frem til indtil videre:

SELECT
    *
   
    FROM
    Matches
   
    LEFT JOIN
    matches_players
   
    ON
    matches.matchid = matches_players.matchid
   
    LEFT JOIN
    members
   
    ON
    members.id = matches_players.playerid
   
    LEFT JOIN
    matches
   
    ON
    matches_types.matchtypesid = matches.type
   
    WHERE
    matches.matchid = $id

Jeg er ikke klar over om det er fordi det er et andet join man bør benytte i denne situation eller hvad der galt, men jeg får fejlen, #1066 - Not unique table/alias: 'matches'
Avatar billede arne_v Ekspert
06. marts 2011 - 15:48 #1
Jeg synes slet ikke at din beskrivelse på dansk og din SQL passer sammen.

Men fejlen skyldes at du har samme tabel 2 gange i join uden alias.

SELECT
    *
 
    FROM
    Matches m1
 
    LEFT JOIN
    matches_players
 
    ON
    m1.matchid = matches_players.matchid
 
    LEFT JOIN
    members
 
    ON
    members.id = matches_players.playerid
 
    LEFT JOIN
    matches m2
 
    ON
    matches_types.matchtypesid = m2.type
 
    WHERE
    m1-eller-m2.matchid = $id
Avatar billede system_slayer Nybegynder
06. marts 2011 - 15:51 #2
Det vil jeg lige prøve.. Jeg arbejder videre på en andens projekt så det er blevet lidt rodet. Kan godt se navnene ikke helt giver mening!
Avatar billede system_slayer Nybegynder
06. marts 2011 - 16:16 #3
#1054 - Unknown column 'matches_types.matchtypesid' in 'on clause'

har du nogen ide om hvad der lige er galt her?
Har selvfølgelig tjekket at den eksistere, hvilket den gør..
Avatar billede system_slayer Nybegynder
06. marts 2011 - 16:23 #4
Jeg har et andet join der bruger den samme table, som virkede før.. uden at ha ændret noget, får jeg nu også samme fejl ved den :S
06. marts 2011 - 18:16 #5
Jamen saa lad mig joine traaden med disse observationer: 

Koden

"....LEFT JOIN matches m2 ON matches_types.matchtypesid = m2.type
...."

giver fejl "Unknown column `matches_types.matchtypesid`" fordi der i tabellen matches ikke er nogen kolonne matches_type/matchtypesid.

Som allerede sagt, koden som givet svarer ikke til problemet som beskrevet.  Jeg vil gaette paa at du har ikke tre men fire tabeller, den fjerde match_types(matchid, matchnavn) eller noget i den retning. 

Jeg gaetter videre at din tredje join skulle have vaeret LEFT JOIN match_types ON match_types.matchtypesid = matches.type.

Og endelig gaetter jeg at det fulde problem er dette: For en given match identificeret med $id find matchtypen og de medlemmer der deltog i matchen.

Hvis det alt sammen er korrekt, saa kommer koden (som foreslaaet aendret) stort set til at svare til problemet.

Haaber disse observationer er til nytte.
06. marts 2011 - 18:20 #6
Korrektion:  For tabellen match_types mente jeg kolonnerne matchtypeid og matchtypenavn.
Avatar billede system_slayer Nybegynder
07. marts 2011 - 00:34 #7
I har begge to ret i at min forklaring vist var lidt ukomplet og halvl forkert :)

Beklager...

Jeg har fået det til at virke nu og poster lige det jeg er endt op med :)

SELECT
    *
   
    FROM
    matches m1

    LEFT JOIN
    matches_types m2

    ON
    (m2.matchtypeid = m1.type)
   
    LEFT JOIN
    matches_players

    ON
    (m1.matchid = matches_players.matchid)

    LEFT JOIN
    members m3

    ON
    (m3.id = matches_players.playerid)

    WHERE
    m1.matchid = $id

Tak for hjælpen begge to, i kan jo lige smide et svar, så kan i dele point.
07. marts 2011 - 06:07 #8
Svar fra mig.
Avatar billede arne_v Ekspert
08. marts 2011 - 21:39 #9
svar
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