1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Mehrere Select SUM mit C# zu Formtabelle Fusball

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Mole696, 29 Januar 2020.

  1. Mole696

    Mole696 Benutzer

    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 aktuallisiert, 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...
     
  2. Mole696

    Mole696 Benutzer

    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 + "'  ;";
     
  3. akretschmer

    akretschmer Datenbank-Guru


    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 ...
     
  4. Mole696

    Mole696 Benutzer

    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.
     
  5. Mole696

    Mole696 Benutzer

    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
     
  6. Mole696

    Mole696 Benutzer

    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?
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Ja, was denn nun? NULL != 0

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden