[mysql] probleme mit komplexer sql abfrage



  • so, habe ein problem mit ner abfrage... und zwar brauche ich eine abfrage über mehrere tabellen,um das in eine html seite in eine tabelle zu bekommen,um nach jeder spalte auch sortieren zu können... daher ists etwas kompliziert und ich hoffe man kann mir helfen, ohne das ich die genaue tabellenstruktur etc. angebe, denke mal, dass das noch verwirrender wäre...

    also... habe 2 abfragen, die einzeln problemlos funktionieren:

    (ein wenig vereinfacht,der übersicht halber...)

    SELECT spitzname,avg(punkte) as schnittPunkte,sum(punkte) as gesamtPunkte,
    FROM `ERGEBNIS`, `SPIELER`
    WHERE ERGEBNIS.spieler_id=SPIELER.spieler_id
    GROUP BY spitzname ORDER BY schnittPunkte DESC
    

    und

    select spitzname, sum(wins) from spieler, statistics
    where spieler.spieler_id = statistics.spieler_id group by spitzname
    

    brauche aber beide zusammen in einer abfrage, jedoch,wenn ich das mache:

    SELECT spitzname,avg(punkte) as schnittPunkte,sum(punkte) as gesamtPunkte, SUM(wins)
    FROM `ERGEBNIS`, `SPIELER` , `STATISTICS`
    WHERE ERGEBNIS.spieler_id=SPIELER.spieler_id
    AND statistic.spieler_id = spieler.spieler_id
    GROUP BY spitzname ORDER BY schnittPunkte DESC
    

    gibt er falsche punkte und wins aus, weil er auch mit DISTINCT irgendwie die tabellen mehrfach durchläudt und alles öfter aufsummiert... weil halt bei from noch ne tabelle drin ist..

    sub selects kann ich bei meinem webhoster nicht verwenden, und damit habe ich es aber auch nicht geschafft ... Hat jemand ne Idee ?

    Ich poste doch mal meine tabellen mit paar beispieldaten, damit man besser durchsieht:

    spieler
    spieler_id | name | vorname ....

    spiel
    spiel_id | datum | ort | spiel_nr (an einem spieltag werden mehrere runden gespielt, dafür die spielnummern)

    ergebnis
    ergebnis_id | spieler_id | spiel_id | punkte | strikes etc...

    Bis dahin funktionierte alles super, und ich hatte mir keiner tabelle ein problem:

    Jetzt will ich meinen SPielern aber auch wie in der formel eins gesamtsiege geben und für die ersten 3 platzierten punkte verteilen, dazu habe ich folgende tabelle angelegt,die ich auch automatisiert füllen kann, und auch EINZELN ausgeben kann,brauche sie aber wie gesagt mit in der abfrage oben:

    statistics
    statistics_id | spieler_id | spiel_id | points | wins

    besipiel daten:

    1 4 1 0 1
    2 4 1 4 0
    3 0 1 2 0
    4 2 1 1 0

    das sind hier z.b. die eingetragenen werte für spiel_nr 1

    spieler _id 4 bekommt 1 punkt bei wins und 4 bei points, die anderen beiden bekommen 2 und 1 punkt...

    so steht das für alle spiele einzelnd drin,und durch aufsummieren bekomme ich halt die richtiden ergebnisse raus.

    Hoffe das hilft jetzt, dass man ein wneig besser durchsieht...



  • Hallo,

    hab ich doch beschrieben !?

    ich kann nicht nachvollziehen WAS falsch berechnet wird.
    Hättest du die INSERT INTO - Anweisungen ausgefüllt, dann wäre mir das u.U. aufgefallen.

    Aber nachdem du dir keine Mühe gibst, mit mir ein Beispiel durchzurechnen, lassen wir's ..



  • ja so hab ich ja auch ungefähr werte drin...so geht es aber nicht das ich alles korrekt in eine abfrage bekomme, hab ich doch beschrieben !?



  • Das was du willst geht nicht.

    Wenn in der Statistik nur 3 Datensätze drin sind in den anderen aber mehr bekommst du nur 3 berechnet.

    Eben das Problem von dir das mehr Daten in der Statistik sind und JOIN eben dann aufrechnet.



  • also zu einem spiel sind in ergebnis mal 3 oder auch 6 zeilen angelegt,je nachdem wieviele mitgespielt haben...in der statistics sind pro spiel immer 4 zeilen, einer der den siegerpunkt bekommt,und dann noch die ersten 3 die die "weltcup-punkte" bekommen...also immer 4.



  • Und was soll mir das jetzt sagen.
    Ich kann dir sagen das du 2 SQL-Anweisungen machen musst.


Log in to reply