PHP Logikfehler?

  • Hallöschen...
    Um ehrlich zu sein habe ich gerade 'n Brett vorm Kop....


    Ich arbeite gerade an einer Rangliste und bin an der sortierung.
    Das ganze habe ich jetzt einfach durch MYSQL mit "ORDER BY km DESC" gelöst.


    Das funktioniert auch soweit.
    Allerdings wollte ich jetzt, dass nur die ersten 2 Werte ausgelesen werden.
    Dafür habe ich einfach eine neue Variable eingebaut ($Topliste). Diese soll bei jedem zählen um 1 erhöht werden.
    Wenn $Topliste dann 2 erreicht hat, soll die Schleife abbrechen.



    $TopTen wird auch gezählt... Allerdings bricht die Schleife nicht ab sobald sie 2 erreicht. Es wird einfach weiter gezählt.
    Wo ist mein Fehler?

  • Mach das anders. Du kannst dir schon im Query nur die ersten beiden Einträge holen.


    SQL
    LIMIT 2

    Das liefert dir entweder die letzten beiden Einträge (DESC) oder die ersten (ASC).
    Dann kannst du auch das Hochzählen und Abfrage der Variable sparen.
    Pass nur auf, in welcher Reihenfolge du das LIMIT setzt, sonst gibt es einen Fehler. Es war entweder vor oder nach dem ORDER BY. Musst du mal ausprobieren.


    Das Ganze könnte dann den Fehler beheben. Sieht nämlich sonst ganz gut aus.

  • So wird das niemals funktionieren. Du fragst ab ob TopTen höher 2 ist, aber der Wert wird niemals niemals 2, weil TopTen den Wert 0 hat und du ihn mit 1 multiplizierst.
    mysql_* ist nicht mehr aktuell, daher solltest du MySQLi oder am besten PDO verwenden.


    #edit
    Habe es wohl falsch verstanden. Du gehst die Sache total falsch an...





    Mit freundlichen Grüßen

    Einmal editiert, zuletzt von Kylon ()

  • PHP
    <?
    $sql2="SELECT km, name FROM accounts ORDER BY km DESC LIMIT 2";
    $result=mysql_query($sql2);
    while($rows=mysql_fetch_array($result)) 
    	{
    		//Was soll mit den Daten passieren.
    	}
    ?>

    Ich weiß jetzt nicht, ob ich das richtig verstanden habe. Du willst die letzten Einträge haben, mit dem Limit bekommst Du nur 2 Ergebnisse zurück. Die Schleife bricht automatisch nachdem zweiten Durchlauf ab, weil das Array dann keine Einträge mehr hat.


    Aber um eine Topliste zu erstellen, geht man eig. anders vor.

    Chief Technology Officer (CTO)


    Interesse an folgenden Domains?

    fivemp.de - planet-zoo.de

    Jetzt anschreiben :)

  • BTW nutze in Zukunft PDO oder mysqli. Bei den alten mysql-funktionen musst du mysql_free_result nutzen sonst kommt es zu memory leaks.
    mysql_fetch_array hat einen optionalen Parameter standardmäßig ist dieser auf MYSQL_BOTH gestellt, dadurch kannst entweder per index oder internen Datenzeiger.


    siehe dazu auch
    http://php.net/manual/de/function.mysql-fetch-array.php