PHP/Sql Tabelle rückwärts lesen
-
Hallo,
ich habe folgenden code, der die komplette Tabelle ausliest:$query = "SELECT * FROM news_table"; $result = mysql_query($query); while ($line = mysql_fetch_array($result)) { ?> <tr> <td><?=$line[id]?></td> <td><?=$line[sid]?></td> <td><?=$line[headline]?></td> <td><?=$line[news]?></td> <td><?=$line[datum]?></td> </tr> <?PHP }
Funktioniert soweit auch alles. Nun habe ich aber den Wunsch, den obigen Code so zu ändern, dass er anfängt beim letzten Eintrag zu lesen, die Tabelle also quasi rückwärts ausliest. Kann mir da einer von euch weiterhelfen
Vielen Dank schonmal!
-
Ganz einfach:
SELECT * FROM news_table ORDER BY id DESC
In deinem Fall musst du einfach den Primary Key angeben und absteigend sortieren.
Du solltest dir mal die MySQL Dokumentation anschauen.
PS: Du solltest das nicht so verwenden:
<?=$line[id]?>
sondern:
<?=$line['id']?>
Da id keine Konstante ist.
PHP gibt das richtig wieder, weil es die eigentliche Konstante die -du da angibst-, als Zeichenkette ausgibt, ist jedoch unschön und kann zu Fehlern führen.
-
ac!d schrieb:
Du solltest das nicht so verwenden:
<?=$line[id]?>
Stimmt, die noch bessere (weil portablere) Methode wäre allerdings:
<?php print($line['id']); ?>
Abgesehen davon sollte man vorsichtig sein, welche Namen man seinen SQL-Spalten gibt. MySQL kommt nämlich manches Mal in Verlegenheit, wenn eine Spalte den Namen von z.B. einem Keyword bekommt. Ich habe bereits mit einem MySQL-Server gearbeitet, der nicht mit einer Spalte, die einfach nur "id" hieß, zurecht gekommen ist. Dort kann man sich z.B. mit einem sinvollen Prefix leicht Abhilfe schaffen: statt nur "id" z.B. "newsID".
ac!d schrieb:
PHP gibt das richtig wieder, weil es die eigentliche Konstante die -du da angibst-, als Zeichenkette ausgibt, ist jedoch unschön und kann zu Fehlern führen.
Nö, ist nicht "unschön und kann zu Fehlern führen", sondern ist "ein Fehler"
-
Reyx schrieb:
Abgesehen davon sollte man vorsichtig sein, welche Namen man seinen SQL-Spalten gibt. ...
Ich weiß nicht, wie es bei anderen Datenbanken ist, aber by mySQL kann man Spalten- und Tabellennamen mit `` einschliessen und hat überhaupt keine Probleme, was die Bezeichnungen angeht, also:
SELECT `id`, `title`, `text` FROM `news` ORDER BY `date` ASC; ...
Läuft bei mir wunderbar. Ich hatte auch schonmal ne Spalte `key`. Ging auch.
Andere DB-Systeme haben doch bestimmt auch solche, wie nennt man die eigentlich (?), "Enclosement-Chars", oder so?
Ich hab' jedenfalls meiner DB-Klasse eine enclose-Methode spendiert, die alle Tabellen- und Spaltennamen in `` einschliesst und seitdem keine Probleme mehr mit Bezeichnungen.
-
So sind die Querys aber nicht portable.
Reservierte Schlüsselwörter sollte man nicht verwenden.
id ist aber kein Reserviertes Schlüsselwort und ich denke das es damit nie Probleme geben wird.
Ich arbeite mit dem Spaltennamen id schon seit Version 3 von MYSQL und hatte noch nie Probleme.Bei MSSQL z.B. verwendet [] für Spaltennamen die nicht erlaubt sind.
z.B. 1234spalte muss man [1234spalte] schreiben weil Zahlen nicht erlaubt sind.
Aus diesem Grund sollte man eben solche Namen nicht verwenden um einfach von einem RDBMS zum anderen wechseln zu können. Insbesondere im Profibereich ist dies erforderlich.
-
Deswegen ist das Zeichen zum einschliessen in meiner Klasse ja austauschbar.
Die Query-Objekte enthalten das Zeichen gar nicht, das wird erst eingefügt, wenn das Query gebaut wird. Aber gut zu wissen, dass es bei MSSQL [] ist, dann muss ich 2 Zeichen berücksichtigen. Danke.