Hallo ich Möchte gerne die 10 Größten Werte aus meiner DB ausgeben?

5 Antworten

Dazu musst du dein SQL-Query anpassen. In deinem Fall wäre es folgendes:

SELECT * FROM users ORDER BY coins DESC LIMIT 10;

Mit ORDER BY gibst du an, nach welcher Spalte sortiert werden soll. DESC steht für absteigend, also höchster Wert zuerst. Am Schluss mit LIMIT definierst du die Anzahl Ergebnisse.

Wenn ich jetzt keinen Gedankenfehler habe...

<?php $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$sql = "SELECT * FROM users ORDER BY coins DESC LIMIT 10"; foreach ($pdo->query($sql) as $row) { echo $row['coins']." ".$row['id']."
"; echo "E-Mail: ".$row['email']."

"; } ?>

Hei danke :) ja das hilft allerdings :/ die user werden jz zwar aufgelistet aber der mit den Meisten Coins steht noch immer nicht ganz oben.. es ist alles bund duchgemischt

0
@flo34771

Ach und die Zahlen werden nicht richtig ausgeben ohne number_format

<?php $sql = "SELECT * FROM users ORDER BY coins DESC LIMIT 10";
foreach ($pdo->query($sql) as $row) {
$coinsrow = number_format(
$row['coins'], // zu konvertierende zahl
0, // Anzahl an Nochkommastellen
".", // Dezimaltrennzeichen
"." // 1000er-Trennzeichen
);


?><?echo $coinsrow . ""; echo " User: ".$row['email']."
";?><?
} ?>



0

SELECT * FROM users ORDER BY coins DESC LIMIT 10

Zwei Möglichkeiten möchte ich vorschlagen

  1. Du sortierst deine Liste per SQL nach coins mit "ORDER BY coins DESC" und lässt beim Zählen in PHP einen Zähler mitlaufen, den du bei 10 Durchläufen abbrichst.
  2. Du sortierst deine Liste per SQL nach coins wie oben und gibst zusätzlich das Schlüsselwort "first" (oder "top" je nach SQL-Derivat) der SELECT-Anweisung mit 
    SELECT first 10 * FROM users ORDER BY coins DESC
Woher ich das weiß:Berufserfahrung – Programmierer

Variante 2 würde ich klar bevorzugen. Dadurch werden lediglich 10 Werte per SQL abgefragt. Bei Variante 1 werden potentiell alle Werte abgefragt und müssen anschließend noch durch den Zähler ausgewählt werden.

0

Diese Aufgabenstellung ergibt nicht immer eine eindeutige Antwort. Wenn der 10. und 11. user die gleiche Anzahl von Coins haben, kann sowohl der noch ausgegebene 10. als auch der abgehackte 11. berechtigt der letzte sein. Ich würde da noch eine Zeitangabe in die Sortierung nehmen, dann ist das Ergebnis wenigstens jedesmal gleich.