"Gesamtstand Ausgabe" Problem

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

  • "Gesamtstand Ausgabe" Problem

    Hallo,

    ich würde gerne den Gesamtstand aller Formeln (erklärt sich unten) ausgeben. Es handelt sich dabei um 8 Formeln, welche unterschiedliche läufe an unterschiedlichen Plätzen hatten. Zum besseren verständnis habe ich ein Bild angehängt.

    Nun soll es so sein, das aus jeder Formel die Top 5 Fahrer zu sehen sind. Wie gehe ich am besten vor?

    Pic Legende
    Id - ist klar.
    Pos - Erreichter Platz im bezug auf die Location (Loc) und Formel (formula)
    Nr - Fahrernummer, ändert sich nie.
    Name - Fahrername
    h1-h4 - Erreichte Punkte in den Läufen 1-4 in der jeweiligen Location
    total - finaler Punktestand nach allen 4 läufen in der jeweiligen Location
    location - austragungsort. 1 = Berlin, 2 = Frankreich
    formula - Gefahrene Formel



    ich hoffe ihr könnt mir weiterhelfen.
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

  • #2
    Tja am einfachsten wäre ja wenn du für jede formel eine extra Abfrage alla "Gib alles von formula, sortiert nach pkt, limit 5" absetzen würdest.

    Du wirst dich jetzt sicherlich fragen geht das nicht alles in einer Abfrage ...

    Leider hab ich grade keinen DB Server bei der Hand mit dem ich noch ein bisschen rum spielen könnte...

    trotzdem würde ich jetzt mal behaupten wollen das man das kaum in eine Abfrage packen kann...

    Ich lass mich aber gern eines besseren belehren!


    Bye!

    Kommentar


    • #3
      Wie würde denn die eine Abfrage aussehen?
      The Human Mirror - Mein Blog!
      www.sonicsense.de - The future of music!

      Kommentar


      • #4


        Ich sagte doch das ich nicht glaube das man alles in eine Abfrage packen kann...

        Oder meinst die eine pro formel?

        Also die ersten Fünf der Formel 2:
        SELECT * FROM formular ORDER BY total WHERE formula='f2' LIMIT 5


        Bye!

        Kommentar


        • #5
          Original geschrieben von dayman


          Ich sagte doch das ich nicht glaube das man alles in eine Abfrage packen kann...

          Oder meinst die eine pro formel?

          Also die ersten Fünf der Formel 2:
          SELECT * FROM formular ORDER BY total WHERE formula='f2' LIMIT 5
          Das würde eben nicht gehen, weil pro Formel 2 oder mehr Einträge sein können mit gleichem Namen, aber unterschiedlicher Location. In einem solchen Fall müssten die TOTAL Punkte zusammen gezählt werden oO
          The Human Mirror - Mein Blog!
          www.sonicsense.de - The future of music!

          Kommentar


          • #6
            Sorry das hab ich übersehen

            Kann ich davon ausgehen das jeder Fahrer nur in einer Formel fährt? Oder bleiben die alten Daten bei einem Formelwechsel in der Tabelle?


            Bye!

            Kommentar


            • #7
              versuchs mal so:
              Code:
              SELECT 
                  Name, formula, sum(total) gesamt 
              FROM 
                  deinerTabelle 
              GROUP BY Nr 
              ORDER BY 
                  formula ASC, 
                  gesamt DESC
              die jeweiligen TOP 5 musst du per php in der whileschleife ziehen ... zB: zähler bis 5 mitlaufen lassen
              Kissolino.com

              Kommentar


              • #8
                Nein, da die Fahrer teilweise in 2 Formeln mitfahren. Ich habs mir auch einfacher vorgestellt. oO
                The Human Mirror - Mein Blog!
                www.sonicsense.de - The future of music!

                Kommentar


                • #9
                  Original geschrieben von Wurzel
                  versuchs mal so:
                  Code:
                  SELECT 
                      Name, formula, sum(total) gesamt 
                  FROM 
                      deinerTabelle 
                  GROUP BY Nr 
                  ORDER BY 
                      formula ASC, 
                      gesamt DESC
                  die jeweiligen TOP 5 musst du per php in der whileschleife ziehen ... zB: zähler bis 5 mitlaufen lassen
                  Danke, das geht soweit. Nur ist nur noch ein Problem da. Das Problem das Fahrer mit gleichem Namen und gleicher Nummer in 2 Formeln mitfahren. Gäbe es dafür auch noch eine Lösung?
                  The Human Mirror - Mein Blog!
                  www.sonicsense.de - The future of music!

                  Kommentar


                  • #10
                    Code:
                    ... GROUP BY formula, Nr ...
                    ... könnte passen ... sonst musst du wirklich pro formel eine abfrage fahren ... btw: dass das datenbankmodell nicht das gelbe vom ei ist, ist aber schon klar?
                    Kissolino.com

                    Kommentar


                    • #11
                      Original geschrieben von Wurzel
                      Code:
                      ... GROUP BY formula, Nr ...
                      ... könnte passen ... sonst musst du wirklich pro formel eine abfrage fahren ... btw: dass das datenbankmodell nicht das gelbe vom ei ist, ist aber schon klar?
                      Ja, leider. Das macht die sache ja so kompliziert. Hättest du einen besseren Vorschlag? für die Struktur der daten?
                      The Human Mirror - Mein Blog!
                      www.sonicsense.de - The future of music!

                      Kommentar


                      • #12
                        such mal nach "normalisierung" und schau dir die verschiedenen ansätze
                        an ... JOINS sind in dem zusammenhang dann auch wichtig.
                        Kissolino.com

                        Kommentar


                        • #13
                          Ok, werde ich machen.

                          Nur noch eine Frage, was wohl weniger SQL ist.

                          Ich gebe den SQL befehl per While schleife aus. Allerdings kann ich dann ja nicht wirklich die Top 5 ausgeben. Selbst wenn ich per Count die ausgabe auf 5 Reduziere bekomme ich ja immer nur die f1 Top 5, da der rest ja später erscheint. Oder mach ich grade nen falschen ansatz?

                          Hier ist mein Code dazu...
                          PHP-Code:
                          $sql "SELECT 
                              name, formula, sum(total) gesamt 
                          FROM 
                              mx_r_overall 
                          GROUP BY formula, Nr 
                          ORDER BY 
                              formula ASC, 
                              gesamt DESC"
                          ;

                          $result mysql_query($sql) OR die(mysql_error());
                          while(
                          $row mysql_fetch_assoc($result)) {
                          echo 
                          ''.$row["name"].'&nbsp;'.$row["nr"].'&nbsp;'.$row["formula"].'&nbsp;'.$row["gesamt"].'<br>'
                          The Human Mirror - Mein Blog!
                          www.sonicsense.de - The future of music!

                          Kommentar


                          • #14
                            du musst dir merken, welche 5 du grade ausgibst ... hast du 5 erreicht machst du solange nix, bis eine neue formula kommt ... zähler auf 1 setzen
                            und das spiel wieder beginnen ...
                            Kissolino.com

                            Kommentar


                            • #15
                              Original geschrieben von Wurzel
                              du musst dir merken, welche 5 du grade ausgibst ... hast du 5 erreicht machst du solange nix, bis eine neue formula kommt ... zähler auf 1 setzen
                              und das spiel wieder beginnen ...
                              Der hat mir gefehlt, der Denkanstoß. Danke dir.
                              The Human Mirror - Mein Blog!
                              www.sonicsense.de - The future of music!

                              Kommentar

                              Lädt...
                              X