Mehrere Select SUM mit C# zu Formtabelle Fusball

Mole696

Benutzer
Beiträge
6
Guten Tag liebe Forumuser,

derzeit bastele ich an einem C# Programm welches die Tabellen im Fußball wider gibt und scheitere gerade bei der Formtabelle zumindest mit dem Sql Code. Die anderen Tabellen funktionieren, da ich mir alles in Variablen abgespeichert hab und später eben mit dem neuen Ergebnis addiere....

Gespeist werden die Tabellen aus der Begegnungstabelle oder Matchtable in welchem ich nur noch die Ergebnisse eintragen muss. Mit dem Update des Ergebnisses eines Spieles werden die Gesamt-, Heim- und Auswärtstabelle aktualisiert, auch die Begegnungstabelle selbst erhält noch weitere Werte. Bei den Gesam-, Heim- und Auswärtstabellen lade ich mir die Werte aus der Datenbank in Variablen und speichere mit dem neuen Ergebniss wieder in der Datenbank ab. Ich weiß eigentlich umständlich, bin aber Neuling in der Materie und legte mir ein Buch zum Thema MySql zu, welches sich aber hauptsächlich mit PHP beschäftigt und nur wenige Seiten für meine Belange zu gebrauchen sind, eher Fehlkauf.

Die Formtabelle gibt die letzten 5 Spiele wider, die daraus erzielten Punkte, Tore, Gegentore und Billanz einer Mannschaft. Aus der Vergangenheit brauche ich aber nur 4 Spiele, denn wenn ich ein Ergebniss für 2 Mannschaften eintrage habe ich ja wieder 5 Spiele. Es sollen insgesamt immer nur 5 Spiele für jedes Team auf der Formtabelle stehen. 4 aus der Datenbank(Begegnungstabelle) + neuestes Spielergebnis.
Um es mir zu erleichtern hatte ich mir einen Code gebastellt, der mit dem eintragen des Spielergebniss auch gleich die Punkte für beide Teams, die Tore und Gegentore, sowie die Tordifferenz oder billanz für jede Mannschaft abspeichert in Form von Heimteam und Gastteam.

Begegnungstabelle besteht aus Spalten:
Spieltag, Datum, Heimmannschaft, HeimTore, GastTore, Gastmannschaft, Punkte_Heim, Punkte_Gast, Diff_Heim, Diff_Gast, Sieger

Im Hauptprogramm muss ich später nur noch die Tore eintragen, die anderen Felder werden automatisch ausgefüllt.

Die Formtabelle hatte ich versucht so zu erstellen, bzw. aktuell zu halten, in dem ich die 4 letzten Spiele der Heimmannschaft und der Gastmannschaft auslese.
Im Select Befehl sage ich einfache WHERE Heimteam="" dabei gruppert es doch richtig und ich summiere die einzelnen Felder welche zum Heimteam gehören. Aus 4 Spielen ist klar eine Mannschaft hat 2* zu Hause gespielt und zwei mal Auswärts.

So brauche ich hierzu:
(SELECT SUM(Punkte_Heim) FROM Begegnung WHERE Heimteam="Bayern(Bspw.)" AND Spieltag BETWEEN 16 AND 19)+
(SELECT SUM(Punkte_Gast) FROM Begegnung WHERE Gasteam="Bayern(Bspw.)" AND Spieltag BETWEEN 16 AND 19)+
aktuelles Ergebnis

In der Workbench von MySql tut das so und liefert auch die richtige Abfrage zurück. Ich hatte nun beide Select in Klammer geschrieben, doch will ich dies ja mit Update und Set.

Also Update Formtabelle Set Punkte=(
(SELECT SUM(Punkte_Heim) FROM Begegnung WHERE Heimteam="Bayern(Bspw.)" AND Spieltag BETWEEN 16 AND 19)+
(SELECT SUM(Punkte_Gast) FROM Begegnung WHERE Gasteam="Bayern(Bspw.)" AND Spieltag BETWEEN 16 AND 19)+3)

So tut das in der Workbench, aber mit C# nicht, bzw. ich will ja gleich alle Spalten aktuallisieren, also langer Code.

Weiß aber nun nicht wieso. Oder weiß jeman einen geschickteren Weg?

Würde jetzt gerne den Code reinsetzten, aber muss kurz auf den Server aufschalten...
 
Werbung:
Also nun hier der Code:
Code:
//---- Update der Formtabelle Heimteam
                string Befehl_Update_Formtabelle_Heimteam = "UPDATE Formtabelle SET Spiele='" + Anzahl_Spiele_for_Form + "', Tore=((SELECT SUM(ToreHeim) FROM begegnung WHERE Heimmannschaft='"+ this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '"+Spieltag_berechnet+"' AND '"+Spieltag_for_Form+ "')+(SELECT SUM(ToreGast) FROM begegnung WHERE Gastmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "')+'"+Tore_Heimmannschaft+"'), " +
                    "gegTore=((SELECT SUM(ToreGast) FROM begegnung WHERE Heimmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "')+(SELECT SUM(ToreHeim) FROM begegnung WHERE Gastmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "')+'" + Tore_Gastmannschaft + "'), " +
                    "Diff=((SELECT SUM(Diff_Heim) FROM begegnung WHERE Heimmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "')+(SELECT SUM(Diff_Gast) FROM begegnung WHERE Gastmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "')+'" + Diff_Heim + "'), " +
                    "Punkte=((SELECT SUM(Punkte_Heim) FROM begegnung WHERE Heimmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "')+(SELECT SUM(Punkte_Gast) FROM begegnung WHERE Gastmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "')+'" + Punkte_Heim + "') WHERE Mannschaft='"+ this.Heimteam_Begegnung_txt.Text + "'  ;";
 
So tut das in der Workbench, aber mit C# nicht, bzw. ich will ja gleich alle Spalten aktuallisieren, also langer Code.

Weiß aber nun nicht wieso. Oder weiß jeman einen geschickteren Weg?


Viel mehr als 42 als die Antwort auf alle Fragen kann man da nicht geben. "tut nicht" ist halt keine sinnvolle Problembeschreibung. Vielleicht einfach nur ein Problem mit '`´" oder so ...
 
Danke, ja, wusste nicht genau wie ich beschreiben sollte,dass er zwar keine Fehlermeldung bringt ich aber statt ordentliche Werte dann NULL in den Spalten der Formtabelle habe.

Beim Laufen (kurz Einkaufen) war mir nun auch so, dass ich Zeichenfehler habe und ich meine ich müsste nachdem = die Abfrage in einfachen Anführungszeichen setzen muss.
Könnte dies sein?
Also Tore='(Select...)'

Kann es leider gerade noch nicht probieren da noch unterwegs.

Doch vielen vielen Dank schonmal für die Antwort.
 
Leider ohne Erfolg :(
Hatten nun dies hier probiert:
Code:
"UPDATE Formtabelle Set Spiele='"+ Anzahl_Spiele_for_Form + "', Tore='((SELECT SUM(ToreHeim) FROM begegnung WHERE Heimmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "') + (SELECT SUM(ToreGast) FROM begegnung WHERE Gastmannschaft='" + this.Heimteam_Begegnung_txt.Text + "' AND Spieltag BETWEEN '" + Spieltag_berechnet + "' AND '" + Spieltag_for_Form + "') + ('" + Tore_Heimmannschaft + "'))' WHERE Mannschaft='" + this.Heimteam_Begegnung_txt.Text + "'  ;"

Also nur mal versucht die Tore up to date zu bekommen, aber hier kommt eine Error Meldung mit Syntax Fehler. Anzahl Spiele funktioniert immer.
Hatte auch versucht das Ganze in doppelte Anführungsstriche zu setzten also Tore="(Select...)" aber da kommt sofortige Fehlermeldung.

In der Workbench funktioniert aber folgender Code:
Code:
UPDATE Formtabelle SET Punkte=((SELECT SUM(Punkte_Heim) FROM begegnung WHERE Heimmannschaft="RB Leipzig" AND Spieltag BETWEEN 14 AND 18)+(SELECT SUM(Punkte_Gast) FROM begegnung WHERE Gastmannschaft="RB Leipzig" AND Spieltag BETWEEN 14 AND 18)+3) WHERE Mannschaft="RB Leipzig";

Beim vergleichen der beiden Codes sind die fast identisch, bis auf die Dinge von C#

Wollte dies Problem des Auslesens und hinzufügen und wieder abspeichern halt schon über SQL lösen. Scheint schwieriger als gedacht.
Ansonsten ziehe ich mir die 4 letzten Spiele einer Mannschaft aus der Datenbank raus speichere sie wieder in Variablen und addiere das neueste Ergebnis hinzu und speichere es in der Formtabelle. So bleibt die auch immer aktuell. Aber es wären für Tore, Gegentore, Differenz, Punkte eben wieder 8 Variablen (für 2 Teams).

Das ist eigentlich das letzte i Tüpfelchen zum funktionieren des Hauptprogramms. Werde dann 40 Ligen wie Bundesliga, LaLiga, Seria A hinzufügen und aktuell halten. Dann kommt das Suchprogramm zum Einsatz, welches ich noch nicht geschrieben habe und der Code dafür ist noch schwerer... Ich glaube ich schaue nochmal nach einem Buch über SQL, welches sich nicht auch mit PHP bveschäftigt, denn in dem 450 Seiten Schinken sind nur ca. 10 Seiten, welche ich gebrauchen kann.

Trotzdem Danke
Werde es Morgen nochmals probieren
 
Mal noch eine Frage:
Ich versuche da eine Tabelle (Begegnung) auszulesen und diese ist aber bisher leer, bzw. nur mit dem Wert 0 gefüllt, außer den Teams. Funktioniert das überhaupt oder liegt es daran, dass ich zwei Select ansetze auf keinen Wert bzw. auf 0, könnte das überhaupt funktionieren?
 
Werbung:
Mal noch eine Frage:
Ich versuche da eine Tabelle (Begegnung) auszulesen und diese ist aber bisher leer, bzw. nur mit dem Wert 0 gefüllt, außer den Teams.
Ja, was denn nun? NULL != 0

Funktioniert das überhaupt oder liegt es daran, dass ich zwei Select ansetze auf keinen Wert bzw. auf 0, könnte das überhaupt funktionieren?

Wenn eine Tabelle keine Einträge hat, so hat das Resultat auch keine Einträge. Wenn eine Tabelle Einträge hat, die auf eine evtl. WHERE-Condition passen, dann sind diese im Resultat.

Der Rest Deiner Frage ist unverständlich.


Select Kaffee.
 
Zurück
Oben