Florian Schaf: Mysql/PHP - obersten zehn datensätze anzeigen

Hallo
ich sitze jetzt schon 2 stunden an dem so ziemlich einfachsten was man sich nur vorstellen kann: ich habe die obersten zehndatensätzte meiner DB ausgewählt und möchte diese nun über PHP in eine HTML tabelle hineinschreiben.
MySQL-Query:
SELECT name, adresse, telefon FROM adressen ORDER BY timestamp DESC LIMIT 10
entschuldige für diese blöde frage
flo

  1. Hallo,

    Zwei Fragen: ;)

    1. Was heißt "obersten"? Älteste oder welche meinst Du?
    2. Was geht nicht oder welche Meldung kriegst Du?

    Gruß, Thoralf

    --
    Sic Luceat Lux!
    1. Hallihallo!

      Aus eigener Erfahrung kann ich Dir zum Thema PHP in Verbindung mit MySQL für Anfänger dieses Tutorial nur empfehlen.
      Es ist vielleicht nicht perfekt, aber ein sehr gut geschriebener und leicht verständlicher Einstieg.

      Viele liebe Grüße,
      Der Dicki

    2. mit obersten meine ich die ältesten (timestamp)
      es funktioniert insofern nicht, als er immer nur den obersten datensatz anzeigt,die restlichen 9 nicht. zumindest war das bei meinen versuchen so, da ich aber anfänger bin heißt das nicht viel (-;

      1. SELECT name, adresse, telefon FROM adressen ORDER BY timestamp DESC LIMIT 10

        Was erwartest du, wenn du bei LIMIT zwar einen Anfangswert angibst, aber keine Anzahl?
        Hier wird dir (falls keine Fehlermeldung kommt) der 11te Wert angezeigt, da von 0 zu Zählen begonnen wird.

        1. Hallihallo!

          SELECT name, adresse, telefon FROM adressen ORDER BY timestamp DESC LIMIT 10

          Was erwartest du, wenn du bei LIMIT zwar einen Anfangswert angibst, aber keine Anzahl?

          Dem stimme ich gemäß http://dev.mysql.com/doc/refman/4.0/de/select.html (ziemlich weit runter scrollen) nicht zu:

          Zitat:
          ------------------------

          Die LIMIT-Klausel wird benutzt, um die Anzahl von Zeilen, die vom SELECT-Statement zurückgegeben werden, zu beschränken. LIMIT erwartet ein oder zwei numerische Argumente.

          Wenn zwei Argumente angegeben sind, legt das erste den Offset der ersten Zeile fest, die zurückgegeben wird, und das zweite gibt die maximale Anzahl von Zeilen an, die zurückgegeben werden. Der Offset der anfänglichen Zeile ist 0 (nicht 1):

          mysql> select * from tabelle LIMIT 5,10;  # Zeilen 6 bis 15 zurückgeben

          Wenn ein Argument angegeben wird, stellt es die maximale Anzahl von Zeilen dar, die zurückgegeben werden:

          mysql> select * from tabelle LIMIT 5;     # Die ersten 5 Zeilen zurückgeben

          Mit anderen Worten ist LIMIT n äquivalent zu LIMIT 0,n.
          ----------------

          Zitat Ende.

          Viele liebe Grüße,
          Der Dicki

        2. Sorry, is beim kopieren draufgegangen
          SELECT datum, betrag, grund, timestamp FROM kassa ORDER BY timestamp DESC LIMIT 10,0

          1. Sorry, is beim kopieren draufgegangen
            SELECT datum, betrag, grund, timestamp FROM kassa ORDER BY timestamp DESC LIMIT 10,0

            Ok, das erklärt es noch besser. Du gibst als Rowcount 0 an. Also Anfang -> Zeile 11, Anzahl Zeilen -> 0

            http://dev.mysql.com/doc/refman/5.1/en/select.html

        3. Kommando zurück, meine Aussage ist falsch. Hatte die Syntax falsch im Kopf und hab grad nochmal nachgelesen.

  2. okay, dieses problem ist aus der welt geschafft.
    was ich eigentlich wissen wollte, ist, wie ich das mit der schleife am besten mache.

  3. okay, habe alles :
    for ($z=1; $z <= 10; $z++) {
            $last_ten_query = mysql_query('SELECT a, b, c FROM kassa ORDER BY timestamp DESC LIMIT '.$z.',1');
            $last_ten = mysql_fetch_assoc($last_ten_query);
            echo "<tr>
                    <td>".$last_ten[a]."</td>
                    <td>".$last_ten[b]."</td>
                    <td>".$last_ten[c]."</td>
                  </tr>";
            }

    1. Hallihallo!

      Ein solches Vorgehen hat aber den Nachteil, daß Du damit Deine Datenbank unnötig quälst, indem Du 10 Querys in unmittelbarer Abfolge reinfeuerst, um einen Effekt zu erhalten, den Du genauso gut mit einer einzigen Abfrage erzielen kannst.

      Hast Du Dir den Link in diesem Posting mal angesehen?
      Er führt zu einem Tutorial, in dem das Vorgehen wesentlich besser beschrieben ist.

        
      $last_ten_query = "SELECT a,b,c FROM kassa ORDER BY timestamp DESC LIMIT 10;";  
      $last_ten_result = mysql_query($last_ten_query);  
      while ($last_ten = mysql_fetch_assoc($last_ten_result) {  
         echo ...  
      }  
      
      

      Ich weiß, das ist immer noch nicht das Optimum, aber es soll nur einen anderen, besseren Weg aufzeigen.
      (Auch, wenn der Code umständlicher aussieht, ist er dennoch wesentlich schonender für alle Beteiligten.)

      Mein dringender Rat: lies das Tutorial, falls es Dir nicht gefällt, gibt es auch noch einige Andere. Google hilft gerne bei der Suche.

      Viele liebe Grüße,
      Der Dicki