MySQL Datenbank

Hallo,

was mySQL betrifft bin ich noch ein Anfänger, daher habe ich ein Problem mit dem ich nicht weiter kommen.

Hoffentlich habt ihr ein paar Tipps.

Ich bin dabei ein Projekt zu machen, bei dem verschiedene Teams, Spiel machen und Fragen beantworten.

Es gibt 17 Teams, 6 Spiel und 8 Fragebogen. Jedes Team bekommt pro Spiel und Fragebogen Punkten.

Bis jetzt habe ich so angefangen: 3 Tabellen

Team ( idTeam , TeamName)
PunkteFragebogen(idFrageBogen, idTeam , Punkte)
PunkteSpiel(idSpiel, idTeam , Punkte)

Das ganze sieht dann zum Beispiel so aus:

Tabelle:TEAM
idTeam | TeamName
1 | Alpha
2 |Bravo
3 |…
…| …
17 |…

Tabelle:stuck_out_tongue:unkteFragebogen
idFragebogen | idTeam | Punkte
1 | 1 | 50
1 | 2 | 100
1 | 3 | 75
…|
2 | 1 | 25
2 | 2 | 30
…|
…|
8 | 1 | 15

Tabelle:stuck_out_tongue:unkteSpiel
idSpiel | idTeam | Punkte
1 |1 | 50
1 | 2 | 55
1 | 3 | 56

2 | 1 | 55
2 | 2 | 55

3 | 3 | 57

6 | 6 | 58

Ist diese Struktur sinnvoll?

Ich weiss nämlich nicht wie ich jetzt das Total der Punkte (aus Spiel und Fragebogen) rechne
um eine platzieren erhalten zukönnen!

z.B.
idTEAM | PunkteTotal
3 | 500
2 | 480
15 | 370
… …

Ich hoffe ihr habt ein paar Tipps. Und hoffentlich muss ich nicht alles neueingeben :smile:

Also Danke im voraus, für jede hilfreiche Antwort!

Hallo,

Es gibt 17 Teams, 6 Spiel und 8 Fragebogen. Jedes Team bekommt
pro Spiel und Fragebogen Punkten.

Bis jetzt habe ich so angefangen: 3 Tabellen

Team ( idTeam , TeamName)
PunkteFragebogen(idFrageBogen, idTeam , Punkte)
PunkteSpiel(idSpiel, idTeam , Punkte)
Ist diese Struktur sinnvoll?

Also für deine Aufgabe denke schon. Du kannst natürlich noch x Extrafälle einbauen… Aber du könntest natürlich auch einfach eine Tabelle machen (was nicht sauber, aber in diesem Fall einfach einfacher ist):
Tabelle (TeamName, SpielPunkte, FragePunkte)

In deinem Fall bekommst du die Summe über
SELECT t3.Teamname, (f.Punkte + s.Punkte) as PunkteSumme
FROM Team t,PunkteFragebogen f, PunkteSpiel.s
WHERE t.idTeam = s.idTeam AND t.idTeam = f.idTeam
(so geht es mit TSQL, denke aber auch in jedem anderen SQL dialekten)

Im zweiten Fall ginge es so:
SELECT Teamname, (SpielPunkte + FragePunkte) as PunkteSumme
FROM Tabelle

Gruß,
Alex

Hallo,

vielen Dank für die Hilfe, ich versuche dass mal umzusetzen!

Also für deine Aufgabe denke schon. Du kannst natürlich noch x

Extrafälle einbauen… Aber du könntest natürlich auch einfach
eine Tabelle machen (was nicht sauber, aber in diesem Fall
einfach einfacher ist):
Tabelle (TeamName, SpielPunkte, FragePunkte)

Ich denke dass wäre nicht nur nicht ganz sauber, sondern auch umständlich, falls es mal mehr oder weniger Spiele oder Fragebögen gibt.

Danke nochmals!

Hallo,

In deinem Fall bekommst du die Summe über
SELECT t3.Teamname, (f.Punkte + s.Punkte) as PunkteSumme
FROM Team t,PunkteFragebogen f, PunkteSpiel.s
WHERE t.idTeam = s.idTeam AND t.idTeam = f.idTeam
(so geht es mit TSQL, denke aber auch in jedem anderen SQL
dialekten)

bei dem Versuch dies umzusetzen habe ich noch immer ein Problem:
Ich erhalte eine sehr lange Liste, in der jedes mal das erste Spiel mit einem FrageBogen zusammen gezählt wurden etwa so z.B.:

idTeam PunkteSumme
1 | 21 (= erstes Spiel mit erstem Fragebogen)
1 | 25 (= erstes Spiel mit zweitem Fragebogen)
1 |
1 |
1 |
1 |
1 |

2
2

Auch mit SUM und GROUP BY bin ich bis jetzt nicht weiter gekommen…

Hallo,

In deinem Fall bekommst du die Summe über
SELECT t3.Teamname, (f.Punkte + s.Punkte) as PunkteSumme
FROM Team t,PunkteFragebogen f, PunkteSpiel.s
WHERE t.idTeam = s.idTeam AND t.idTeam = f.idTeam
(so geht es mit TSQL, denke aber auch in jedem anderen SQL
dialekten)

bei dem Versuch dies umzusetzen habe ich noch immer ein
Problem:
Ich erhalte eine sehr lange Liste, in der jedes mal das erste
Spiel mit einem FrageBogen zusammen gezählt wurden etwa so

Ist auch logisch (eigentlich)
Probier mal eine weitere Tabelle einzufügen:
BogenZuSpiel(idSpiel, idBogen, idTeam)
Und aus deinen anderen Tabelle den idTeam FK raus nehmen…
Die Zusammenführung machst du dann in dieser neuen Tabelle.
Abfrage:
SELECT t3.Teamname, (f.Punkte + s.Punkte) as PunkteSumme
FROM Team t,PunkteFragebogen f, PunkteSpiel.s, BogenZuSpiel bs
WHERE t.idTeam = bs.idTeam AND bs.idSpiel = s.idSpiel AND bs.idBogen = f.idBogen

Gruß,
ALexR

Hallo

mhhh, es tut mir sehr leide,aber irgendwie bin ich auf dem Holzweg, denn das mit der zusätzlich Tabelle BogenZuSpiel verstehe ich nicht ganz:

Die Spiele haben nix mit den Fragenbogen zu tuen.

Probier mal eine weitere Tabelle einzufügen:
BogenZuSpiel(idSpiel, idBogen, idTeam)
Und aus deinen anderen Tabelle den idTeam FK raus nehmen…
Die Zusammenführung machst du dann in dieser neuen Tabelle.
Abfrage:
SELECT t3.Teamname, (f.Punkte + s.Punkte) as PunkteSumme
FROM Team t,PunkteFragebogen f, PunkteSpiel.s, BogenZuSpiel bs
WHERE t.idTeam = bs.idTeam AND bs.idSpiel = s.idSpiel AND
bs.idBogen = f.idBogen

Hallo,

es scheint als hätte ich eine Lösung gefunden…jedoch weiss ich nicht ob die ok und ganz sauber ist:

  • zuerst führe ich mit union die zwei tabelle PunkteSpiel und PunkteFragebogen mit den jeweiligen Summen zusammen, dies ergibt dann eine Tabelle die so aus sieht:

idTeam Punkte
1 | 200 (=Summe aus PunkteSpiel)
2 | …

17
1 |300 (=Summe aus PunkteFragebogen)
2 |…

17

Hieraus suche ich dann alle idTeam (die sind dann zwei mal in der Spalte wegen PunkteSpiel und PunkteFragebogen) und mache die Summe aus den Punkten der Spalte „Punkte“ der Tabelle P

SElECT t.idTeam, SUM(P.Punkte)
FROM (SELECT t.idTeam, SUM(F.Punkte) AS Punkte FROM Team t,PunkteFragenbogen F WHERE t.idTeam=F.idTeam GROUP BY t.idTeam union SELECT t.idTeam, Sum(S.Punkte) AS Punkte From Team t,PunkteSpeil S WHERE t.idTeam=S.idTeam GROUP BY t.idTeam) P , Team t WHERE t.idTeam=P.idTeam GROUP BY t.idTeam ORDER BY P.Punkte DESC