Ankündigung

Einklappen
Keine Ankündigung bisher.

Join Abfrage mit SUM

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Join Abfrage mit SUM

    Hallo Forum,
    ich bin dabei mir meine erste kleine Homepage zu basteln die an einer mysql angebunden ist. Habe mich ganz gut eingelesen, bin aber aktuell an einem Punkt angekommen an dem ich nicht mehr weiter komme und eure Hilfe brauche.
    Es geht darum erreichte Trainingsergebnisse der einzelnen member zu addieren und als ranking in einer tabelle auszugeben.
    Betroffen sind zwei Tabellen.

    Tabelle1:member
    member_id(index)
    vorname
    name

    Tabelle2:results
    id(index)
    member_id
    points

    Das SQL-Statement habe ich via phpmysql erfolgreich getestet.
    Wenn ich nun das Ganze über php auf der Homepage aufrufe bekomme ich einen Fehler bezüglich des SUM-Feldes.


    Hier ein Auszug meines Codes:
    Code:
    foreach($dbh->query('select member.vorname, member.name, SUM(results.points) from results join member on (results.member_id = member.member_id) group by results.member_id order by sum(results.points) desc') as $row) {
        $count++;
        echo "<tr>";
        echo "<td>" . $count . "</td>";
        echo "<td>" . $row['vorname'] . "</td>";
        echo "<td>" . $row['name'] . "</td>";
        echo "<td>" . $row['SUM(points)'] . "</td>";
        echo "</tr>";
    }
    Fehlermeldung:
    Code:
    Notice: Undefined index: SUM(points)
    Die Tabelle wird richtig ausgegeben, jedoch mit leerem Feld Points und eben der Fehlermeldung.

    Ich habe schon etliche Variationen probiert, komme aber nicht auf den Fehler in meinem Code.
    Ich bin für jeden Hinweis dankbar.
    Vielen Dank für eure Hilfe.

    LG
    Mike

  • #2
    Verwende besser einen Alias für die Ausgabe.
    Sähe zum Beipiel so aus
    Code:
    SELECT SUM(results.points) AS Summe  FROM ...
    jetzt kannst du mit $row['Summe'] Deine aufsummierten Punkte ausgeben.

    gleiches gilt das für das JOIN, da solltest du auch mit Alias arbeiten,
    Code:
    FROM results AS r JOIN member AS m
    dann hast du nicht den Tabellennamen als Präfix im SELECT sondern das Alias-Kürzel. und wenn die Tabellenfelder nicht gleich heißen, kannst du dir sogar das sparen.

    Das wäre dann
    Code:
    SELECT
        `vorname`, `name`, SUM(points) AS `Summe`
    FROM
        results AS r JOIN member AS m ON r.member_id = m.member_id
    GROUP BY
        r.member_id
    ORDER BY
        `Summe` DESC
    hier sogar korrekt mit Backticks.

    Des weiteren solltest du die SQL-Abfrage nicht direkt im foreach aufführen. Gehe den Umweg über eine Variable und frage auch nach Fehlern ab, es kann ja sein das die Abfrage gar nicht ausgeführt werden kann und was dann?
    Da verweise ich mal auf das Handbuch, da das nicht Bestandteil deiner Frage war, aber schau dir ruhig mal an wie es gemacht wird.

    Kommentar


    • #3
      Hallo protestix ( lustiger Name ),

      vielen Dank für die schnelle Hilfe. Das hatte ich nicht so schnell erwartet.Prima,,
      Also ich habe es mal mit den Alias probiert, und dann ist der Fehler nicht mehr aufgetreten. Also hat das so funktioniert.
      Das werde ich mir merken für die Zukunft
      Was den Aufbau der Seite angeht besteht sicherlich noch viel Verbesserungspotential. Aber ich bin ja noch am Üben !!
      Aber danke für den Hinweis.

      Ich seh dann mal zu dass es mit der Homepage weiter geht. Habe ja jetzt eine Hürde mit Deiner Hilfe gemeistert.
      Vielen lieben Dank dafür.

      LG
      Mike

      Kommentar

      Lädt...
      X