[Funktion] Bestenliste aus Summe

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

  • [Funktion] Bestenliste aus Summe

    Hi,

    ich habe folgendes Problem:

    Ich habe eine Tabelle, die wie folgt aufgebaut ist:

    ID | datum | zeit | tester | cardid | schueler | modul | erg | klasse


    Ich habe ca. 200 Datensätze, und ca. 40 Schüler. D.h. jeder Schüler hat mehrere Module gemacht, und zu jedem Modul ein Ergebnis bekommen. Soweit so gut. Ich würde jetzt aber gerne eine Liste der ersten 10 machen, die den besten Schnitt haben. Ich muss also zu jedem Schüler die entsprechenden Datensätze Auslesen, und die Summe dann addieren. Aber wie soll ich das realisieren?
    Gibt es da schon den entsprechenden SQL-Befehl, oder ist das eine Sache von PHP?

    Danke schonmal für eure Antworten.

    MfG Gleni

  • #2
    SUM, GROUP BY, ORDER BY und LIMIT sind deine Freunde

    Kommentar


    • #3
      http://dev.mysql.com/doc/mysql/en/SELECT.html
      http://dev.mysql.com/doc/mysql/en/Gr...modifiers.html

      GROUP BY solltest Du Dir anschauen ... !
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        Danke,

        das hat mich schon ein ganzes Stück weiter gebracht.


        PHP-Code:
        $result db_query("SELECT schueler,SUM(erg) FROM ecdl GROUP BY schueler") or db_die();
        while (
        $row db_fetch_row($result)) { $list2[] = $row[0]; }

        echo 
        "<table width=40% border=0 cellpadding=1 cellspacing=1>\n";

        foreach(
        $list2 as $ID)
        {
          
        $result db_query("SELECT schueler, SUM(erg) FROM ecdl WHERE schueler='$ID' AND erg>=80 GROUP BY schueler") or db_die();
          
        $row db_fetch_row($result);

          
        tr_tag($ref);
          echo 
        "<td width=30%>$ID</td>";
          echo 
        "<td width=10%>$row[1]</td></tr>";

        Aber wie Sortiere ich die Ausgabe nach SUM(erg)?
        ASC anhängen geht nicht, und ORDER BY natürlich auch nicht.

        Kommentar


        • #5
          ORDER BY 2 wird gehen....
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            Original geschrieben von Gleni
            und ORDER BY natürlich auch nicht.
            wieso nicht?
            wenn du der funktions-spalte einen alias gibst, wird es funktionieren.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Wieder ein stück weiter...


              PHP-Code:
              $result db_query("SELECT schueler,SUM(erg) FROM ecdl GROUP BY schueler ORDER BY 2 ASC") or db_die();
              while (
              $row db_fetch_row($result)) { $list2[] = $row[0]; }

              echo 
              "<table width=40% border=0 cellpadding=1 cellspacing=1>\n";

              foreach(
              $list2 as $ID)
              {
                
              $result db_query("SELECT schueler, SUM(erg) FROM ecdl 
              WHERE schueler='
              $ID' AND erg>=80 GROUP BY schueler") or db_die();
                
              $row db_fetch_row($result);

                
              tr_tag($ref);
                echo 
              "<td width=20%>$ID</td>";
                echo 
              "<td width=10%>$row[1]</td></tr>";

              Er Sortiert es jetzt zwar "ein bischen", aber immer noch nicht so, wie ich es haben möchte.

              166
              251
              254
              180
              257
              259

              Und wie kann ich der Funktionsspalte einen Alias geben?

              Danke für eure schnellen Antworten. Ich bin ein bischen unter stress.

              Kommentar


              • #8
                warum fragst Du eigentlich zweimal fast das Gleiche ab???
                scheint etwas sinnbefreit zu sein...
                im 2. query das where beschränkt natürlich das sum ergebnis wieder und du sortierst in deinem ersten query...
                NACHDENKEN!!!!
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar

                Lädt...
                X