Avatar billede lsskaarup Nybegynder
13. april 2005 - 21:08 Der er 9 kommentarer og
1 løsning

samle 3 tabeller og lægge tal sammen hvor id'erne er ens

Ja, jeg har siddet og rodet lidt rundt med joins og union, men her ikke rigtigt kunnet få det til at spille maks.

Jeg har 3 tabeller, indeholdende henholdsvis spillerinfo (ifabruger), kampmaal (kampmaal) og kampassist (kampassist).

Tabellerne ser sådan ud:
ifabruger: id, fornavne, efternavn (flere ting, men de er ikke relevant i forhold til dette).
kampmaal: id, kampId, spillerId, mantal
kampassist: id, kampId, spillerId, aantal

Altså kampmaal og kampasist inderholder info om hvilke spillere der her scoret/lagt op til scoring i hvilke kampe, samt antallet af disse pr. kamp.

Det jeg skal have trukket ud er navnene på spillere som enten har scoret, lagt op til scoring eller begge dele, samt antal mål og assist, og en samlet pointhøst (1 assist og 1 scoring giver hvert 1 point) må meget gerne blive lagt sammen i outputtet.

Håber I kan hjælp, for jeg har ikke kunnet samle kampmaal og kampassist, som alle fra begge tabeller kommer med rigtigt.
Avatar billede lsskaarup Nybegynder
13. april 2005 - 21:30 #1
Nu når jeg tænker mig om, som kan det da godt være det ville være smartere med en tabel til både mål og assist.
Avatar billede barklund Nybegynder
13. april 2005 - 21:32 #2
Noget med:

SELECT
  b.id,
  b.fornavne,
  b.efternavne,
  COUNT(m.id) as antal_maal,
  COUNT(a.id) as antal_assist,
  COUNT(m.id) + COUNT(a.id) as antal_point
FROM ifabruger AS b
  LEFT JOIN kampmaal AS m ON b.id = m.spillerId
  LEFT JOIN kampassist AS a ON b.id = a.spillerId
WHERE
  m.id IS NOT NULL OR
  a.id IS NOT NULL
GROUP BY
  b.id
ORDER BY
  antal_point,
  antal_maal,
  antal_assist

Deromkring ;)

--
Morten Barklund
Avatar billede barklund Nybegynder
13. april 2005 - 21:34 #3
Oh, nu fangede jeg lige en fejl, altså du har én record pr. kamp - hvor der evt. er flere mål/assists?

SELECT
  b.id,
  b.fornavne,
  b.efternavne,
  SUM(m.mantal) as antal_maal,
  SUM(a.aantal) as antal_assist,
  SM(m.mantal) + SUM(a.aantal) as antal_point
FROM ifabruger AS b
  LEFT JOIN kampmaal AS m ON b.id = m.spillerId
  LEFT JOIN kampassist AS a ON b.id = a.spillerId
WHERE
  (m.id IS NOT NULL AND m.mantal > 0) OR
  (a.id IS NOT NULL AND a.aantal > 0)
GROUP BY
  b.id
ORDER BY
  antal_point,
  antal_maal,
  antal_assist

Hm, tror jeg nok :)

--
Morten Barklund
Avatar billede lsskaarup Nybegynder
13. april 2005 - 21:49 #4
Jeps, men jeg har selv lige løst den, ved at samle assist og mål tabellen i én tabel, for så er det jo let nok:
SELECT spillerId, fornavn, efternavn, SUM( maal ) AS mål, SUM( assist ) AS ass, sum(maal)+sum(assist) AS samlet FROM kampmaal LEFT JOIN ifabruger ON ifabruger.id = kampmaal.spillerId GROUP BY spillerId

Men jeg tjekker lige din løsning ud, virker den skal du selvfølgelig have pointene.
Avatar billede lsskaarup Nybegynder
13. april 2005 - 21:54 #5
Næsten, men din virker ikke helt, den returnere ikke alle spillere og ved en enkelt tæller den forkert...
Avatar billede barklund Nybegynder
13. april 2005 - 21:56 #6
Ja okay, en lille stavefejl, SM() skulle være SUM() - men hvad er problemet derudover?
Avatar billede barklund Nybegynder
13. april 2005 - 21:57 #7
Men at omskrive databasestrukturen til det, som du selv foreslår, er betydeligt smartere ;)
Avatar billede lsskaarup Nybegynder
13. april 2005 - 22:52 #8
Det var un ikke på grund af SM, selvom der er nogle som kan lige det ;-) Nej den mangler en enkelt spiller, som har lavet en enkelt assist, vist den sidste i tabellen, samt ved en anden spiller må den tælle dobbelt, da han kun har lavet 2 assist men får 4. Derudover sortere den heller ikke, men det skyldes jo at du ikke har sat ASC/DESC på. Men de første ting, er lidt wird?
Avatar billede barklund Nybegynder
13. april 2005 - 23:00 #9
Jo den sorterer, men godt nok stigende - ASC sortering er standard. Ved at tilføje DESC  (som var min intention) vil den sortere mere logisk.

At den ikke medtager nogle spillere kan jeg ikke lige gennemskue. Men det skyldes jo nok, at flere rækker kommer med flere gange. Det kan godt laves, men bliver straks mere besværligt - der skal vist joines med en ekstra brugertabel for at de kan samles korrekt. Det kan jeg ikke lige overskue, hvordan man skulle lave korrekt, men da du jo har løst det på anden og fornuftigere vis, så er det jo ligegyldigt ;)
Avatar billede lsskaarup Nybegynder
13. april 2005 - 23:07 #10
Jeps, det var også bare for at du ikke skulle snydes, hvis du havde løst opgaven, men ellers tak for hjælpen.
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