Avatar billede tanis13 Nybegynder
12. oktober 2011 - 08:16 Der er 2 kommentarer og
1 løsning

Udtræk fra database

Hej Eksperter,

Jeg har den seneste tid rodet med opsætning af en database og tror nu jeg har fundet den rigtige løsning gennem hjælp herinde fra.

Nu står jeg dog i den situation at jeg skal have trukket data ud fra databasen, hvilket volder lidt problemer. Der er blevet foreslået (Christian_Belgien) at jeg benytter GROUP_CONCAT() til at trække de nødvendige data.

Opbygningen af databasen er således:

[player]
id name
1  Bob
2  Jens
3  Hans
4  Klaus

[team]
id name
1  FCK
2  BIF
3  OB
4  AAB

[match]
id date
1  2011-10-10 19:44:42
2  2011-10-10 20:01:12

[match_team]
id match_id team_id
1  1                1
2  1                3
3  2                2
4  2                4

[match_player]
id matchteam_id player_id goals
1  1                          1              2
2  2                          3              1
3  2                          4              0
4  3                          2              1
5  4                          4              1


Ovenstående tabel kan forklares således:
Kamp #1
Hold: FCK vs. OB
Spillere: Bob spillede for FCK, Hans og Klaus spillede for OB
Resultat: BOB scorede 2, Hans scorede 1, kampen blev derfor 2-1 til FCK

Kamp #2
Hold: BIF vs. AAB
Spillere: Jens spillede for BIF, Klaus spillede for AAB
Resultat: Jens scorede 1, Klaus scorede 1, kampen blev derfor 1-1


Jeg ønsker nu at kunne trække dette ud fra tabellen ved hjælp af (helst) én query.

Håber ovenstående giver mening og en venlig sjæl kan give en hånd med løsningen.

Med venlig hilsen
Thomas
Avatar billede tanis13 Nybegynder
12. oktober 2011 - 08:18 #1
Resultatet måtte gerne se således ud:
#1 10/10-11 FCK (Bob) 2 - 1 OB (Hans, Klaus)
Avatar billede tanis13 Nybegynder
13. oktober 2011 - 10:07 #2
Er kommet længere med forsøget med JOIN, men af en eller anden årsag sender den 2 navne ud på personen som er alene.
Ved f.eks. 1vs2 skriver den:

#1 10/11-11 FCK(Bob,Bob) 2 - 1 OB (Hans, Klaus)

koden er:

SELECT DISTINCT m.id, m.date, t1.name team1, GROUP_CONCAT(p1.name) player1, t2.name team2, GROUP_CONCAT(p2.name) player2, mp1.matchteam_id mp1id, mp2.matchteam_id mp2id
FROM `match` m
JOIN `match_team` mt1 ON m.id = mt1.match_id
JOIN `team` t1 ON mt1.team_id = t1.id
JOIN `match_player` mp1 ON mt1.id = mp1.matchteam_id
JOIN `player` p1 ON mp1.player_id = p1.id
JOIN `match_team` mt2 ON m.id = mt2.match_id
JOIN `team` t2 ON mt2.team_id = t2.id
JOIN `match_player` mp2 ON mt2.id = mp2.matchteam_id
JOIN `player` p2 ON mp2.player_id = p2.id
WHERE mt1.team_id < mt2.team_id
GROUP BY m.id

Nogen som har en ide?
Avatar billede tanis13 Nybegynder
18. oktober 2011 - 09:51 #3
Lukker
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