Die 10 höchsten Siege....

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

  • Die 10 höchsten Siege....

    Hallihallo!
    Wünsche allen noch nachträglich ein schönes neues Jahr!

    Das heutige Problem beschäftigt mich schon einige Tage und ich finde irgendwie nicht den richtigen Ansatz dafür.
    Vielleicht könnt ihr mir dabei helfen...

    Ich habe eine Tabelle, in der die Spielergebnisse meines Lieblingsvereins gespeichert sind.
    Unter anderem eben auch die gefallenen Tore.
    Die Tore befinden sich allerdings, um den Zugriff für andere statistische Berechnungen zu haben, in zwei Feldern
    ( sthom und stgeg).

    while ($i < $number) {
    $row = MYSQL_FETCH_ARRAY($result);
    $id = $row["id"];
    $snr = $row["snr"];
    $sday = $row["sday"];
    $smon = $row["smon"];
    $sjahr = $row["sjahr"];
    $sgegner = $row["sgegner"];
    $swhere = $row["swhere"];
    $stgeg = $row["stgeg"];
    $sthom = $row["sthom"];
    $st1geg = $row["st1geg"];
    $st1hom = $row["st1hom"];
    $st2geg = $row["st2geg"];
    $st2hom = $row["st2hom"];
    $st3geg = $row["st3geg"];
    $st3hom = $row["st3hom"];
    $bemerkungen = $row["snote"];

    $difftemp1 = $sthom - $stgeg;

    if ($difftemp1 > $sieg) {
    $sieg = $difftemp1;
    $siegsnr = $snr;
    $siegday = $sday;
    $siegmon = $smon;
    $siegjahr = $sjahr;
    $sieggegner = $sgegner;
    $siegwhere = $swhere;
    $siegtgeg = $stgeg;
    $siegthom = $sthom;
    $siegt1geg = $st1geg;
    $siegt1hom = $st1hom;
    $siegt2geg = $st2geg;
    $siegt2hom = $st2hom;
    $siegt3geg = $st3geg;
    $siegt3hom = $st3hom;
    $siegnotes = $bemerkungen;}
    }
    Dieser Codeschnipsel liest mir zuverlässig den höchten Sieg aus, aber wie komme ich zu den höchten 10 Siegen, also den 10 höchsten Differenzen...

    capsfan
    http://database.capsfans.de
    Coden ist der schmale Grat zwischen geistiger Herausforderung und Wahnsinn.

  • #2
    Wenn du das ganze schon in einer Datenbank speicherst solltest du die Berechnung der Datenbank selbst überlassen..wegen der Anfrageoptimierung.

    So wie ich das (um die Uhrzeit noch) verstehe entspricht der code der datenbankanfrage :
    SELECT * FROM tablename WHERE MAX( sthom - stgeg )

    und demnach würde die entsprechene Anfrage für deine Frage lauten
    SELECT * FROM tablename ORDER BY ( sthom - stgeg ) LIMIT 0,10

    Morgen früh dürfen mich dann die echten Profis berichtigen..
    Gute Nacht..

    Kommentar


    • #3
      Klingt logisch...
      Probiere das aber auch erst nachdem Schlafen aus...
      capsfan
      Coden ist der schmale Grat zwischen geistiger Herausforderung und Wahnsinn.

      Kommentar


      • #4
        Erweiterung :
        SELECT *, (sthom- stgeg) as sieg FROM tablename WHERE MAX( sthom - stgeg )

        Jetzt kannst du auch auf row["sieg"] zugreifen..

        Kommentar


        • #5
          Aber mit LIMIT hinten dran, nicht wahr?

          capsfan

          P.S.: Komme erst jetzt zum probieren...
          Coden ist der schmale Grat zwischen geistiger Herausforderung und Wahnsinn.

          Kommentar


          • #6
            Mit der select anweisung nimmt er nur den wert der maximal ist..bzw mehrere wenn sthom-stgeg gleich sind

            Kommentar


            • #7
              Also:

              Der Select funktioniert einwandfrei... nur verkehrtherum, wie ich feststellen musste.
              So lieferte (sthom-stgeg) LIMIT 0,10 die 10 höchsten Niederlagen und (stgeg - sthom) LIMIT 0,10 die höchsten Siege. Anstatt die Werte zu vertauschen hätte man dann auch mit DESC arbeiten können.
              Um die torreichsten Spiele auszufiltern, muss bei (sthom+stgeg) sogar DESC eingfügt werden, sonst erhält man die torärmsten Spiele.
              Das hängt offenbar mit der alphabetischen Reihenfolge zusammen.
              Danke also für deine Hilfe, als (relativer) Anfänger übersieht man häufig die Möglichkeiten des SELECT-Befehls, zumal man selten in einer Doku alle Varianten beisammen findet!

              Das Ergebnis: http://database.capsfans.de/index.php?sid=legends

              capsfan

              Hier noch die nun verwendeten SELECTS:
              $query = 'SELECT * FROM capsdbspiele ORDER BY ( stgeg - sthom ) LIMIT 0,10';
              $query = 'SELECT * FROM capsdbspiele ORDER BY ( sthom - stgeg ) LIMIT 0,10';
              $query = 'SELECT * FROM capsdbspiele ORDER BY ( stgeg + sthom ) desc LIMIT 0,10';

              [Editiert von capsfan am 03-01-2002 um 03:06]
              Coden ist der schmale Grat zwischen geistiger Herausforderung und Wahnsinn.

              Kommentar


              • #8
                hmm,

                Noe, das hat nix mit alphabethischer Reihenfolge zu tun sondern mit der default Einstellung der ORDER BY Anweisung, die ist nämlich ASC.

                Kommentar


                • #9
                  Richtig!
                  Und deshalb sortiert er A vor B und 1 vor 10, weil's alphabetisch ist...

                  capsfan
                  Coden ist der schmale Grat zwischen geistiger Herausforderung und Wahnsinn.

                  Kommentar

                  Lädt...
                  X