quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2003/07/10 17:51:09

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Daten aus Tabellen auslesen

  1. SELECT mit Tabellen und Spalten
  2. Sortieren der Ausgabe

1. SELECT mit Tabellen und Spalten

Jetzt können wir einzelne Werte aus einer MySQL-Datenbank auslesen (zwar nur direkt in MySQL oder mit PHPMyAdmin) aber wir wollten ja auch Inhalte von Tabellen auslesen. Die Daten aus der Tabelle lesen wir mit der Syntax SELECT spalten FROM tabelle aus.

SELECT spalten FROM tabelle;
        

Da wo jetzt spalten schreiben wir die Namen der Spalten hin, aus denen wir die Werte auslesen wollen. Diese müssen, wie üblich, mit Komma getrennt werden. Da wo jetzt tabelle steht schreibt man die Tabelle hin, aus der man die Spalten auslesen möchte. Üblicherweise ließt man nur aus einer Tabelle aus. Man kann aber aus mehreren Tabellen gleichzeitig auslesen und nennt diese Technik dann JOIN.

Hier ein Beispiel SELECT-Query mit Tabellen und Spalten

SELECT Titel, Datum FROM News;
        

Um die Übersichtlichkeit wieder zu erhöhen schreiben wir diesen Query wieder über mehrere Zeilen auf.

SELECT
    Titel,
    Datum
FROM
    News;
        

Die Schlüsselwörter SELECT und FROM schreiben wir ganz links, die Tabellenspalten bzw. das was nach diesen Schlüsselwörter kommt schreiben wir 4 Zeilen versetzt hin, also eingerückt. Hier können wir sofort erkennen was wir aus welcher Tabelle auslesen.

Ich habe jetzt mal ein paar Beispieldatensätze hinzugefügt. Nun führe ich mal (bei mir lokal) diesen MySQL-Query aus.

mysql> SELECT
    ->     Titel,
    ->     Datum
    -> FROM
    ->     News;
+------------------+---------------------+
| Titel            | Datum               |
+------------------+---------------------+
| Meine erste News | 2002-12-16 21:12:41 |
| Zweite News      | 2002-12-16 21:13:10 |
| blabla           | 2002-12-16 21:13:44 |
| eingefügt        | 2002-12-16 21:13:00 |
+------------------+---------------------+
        

Die Tabelle hat zwar noch andere Spalten und Werte, doch in diesem Fall lese ich nur Titel und Datum aus. MySQL erzeugt intern wieder die Ergebnistabelle bzw. Resulttabelle. Diese hat nicht wie üblich nur eine Zeile sondern hat mehrere Zeilen. Wie wir diese mit PHP auslesen, dazu kommen wir später. Soweit sei schonmal gesagt: Wenn wir eine Resulttabelle mit PHP auslesen so machen wir das Zeilenweise und zwar fangen wir dabei von oben an und arbeiten uns nach unten, Zeile für Zeile.

2. Sortieren der Ausgabe

In MySQL gibt es sowas wie 'oben' und 'unten' nicht. MySQL hat Tabellen und dort werden die Datensätze gespeichert. Beim Auslesen der Daten können die Daten unterschiedlich rauskommen. Üblicherweise in der Reihenfolge wie sie erstellt wurden. Dies muss aber nicht immer so sein.

Ich nehme nochmal Bezug auf das Beispiel.

mysql> SELECT
    ->     Titel,
    ->     Datum
    -> FROM
    ->     News;
+------------------+---------------------+
| Titel            | Datum               |
+------------------+---------------------+
| Meine erste News | 2002-12-16 21:12:41 |
| Zweite News      | 2002-12-16 21:13:10 |
| blabla           | 2002-12-16 21:13:44 |
| eingefügt        | 2002-12-16 21:13:00 |
+------------------+---------------------+
        

Hier sieht man das wir in der Tabelle 4 Datensätze haben. Doch die Ausgabe ist nicht sortiert. Das sieht man an den letzen Eintrag. Dieser liegt zeitlich nach der News 'Meine erste News' und vor der News 'Zweite News', doch in der Resulttabelle liegt dieser am ende. Dies möchten wir eigentlich nicht. Wenn wir die Newstabelle auslesen, dann möchten wir auch diese in einer zeitlichen Reihenfolge haben. Um eine Resulttabelle zu sortieren müssen wir hinter unserem Query noch ein ORDER BY hinzufügen.

SELECT
    Titel,
    Datum
FROM
    News ORDER BY spalte ASC/DESC;
        

Da wo jetzt spalte steht kommt dann der Spaltenname hin, nach dem wir die Resulttabelle sortieren wollen. In diesem Fall ist das die Spalte Datum. Mit ASC oder DESC geben wir an, wie sortiert werden soll. Wenn dort ASC steht wird aufwärts sortiert, wenn dort DESC steht wird abwärts sortiert. In einem Newsscript will man üblicherweise abwärts sortieren, denn die aktuellen News sollen am Anfang und nicht am Ende stehen.

SELECT
    Titel,
    Datum
FROM
    News ORDER BY Datum DESC;
        

Um wieder den Query übersichtlicher zu formen, schreibe ich den Query etwas um.

SELECT
    Titel,
    Datum
FROM
    News
ORDER BY
    Datum DESC;
        

Hier sehen wir dann sofort nach welcher Spalte wie sortiert wird. Wenn wir einen Fall haben, das wir auch noch nach einer zweiten oder dritten Spalte sortieren wollen, müssen wir die Spalten mit Komma trennen wobei jede einzelne Spalte ein ASC oder DESC bekommt damit MySQL weiß wie er dann nach dieser Spalte sortieren soll.

    ....
ORDER BY
    foobar DESC,
    blabli ASC,
    xyz ASC;
        

Hier wird zuerst nach der Spalte foobar abwärts sortiert dann nach der Spalte blabli aufwärts und dann als letzes nach der Spalte xyz aufwärts sortiert.

Wenn wir nun unseren Query direkt in MySQL oder mit PHPMyAdmin ausführen erhalten wir dann folgende Resulttabelle.

mysql> SELECT
    ->     Titel,
    ->     Datum
    -> FROM
    ->     News
    -> ORDER BY
    ->     Datum DESC;
+------------------+---------------------+
| Titel            | Datum               |
+------------------+---------------------+
| blabla           | 2002-12-16 21:13:44 |
| Zweite News      | 2002-12-16 21:13:10 |
| eingefügt        | 2002-12-16 21:13:00 |
| Meine erste News | 2002-12-16 21:12:41 |
+------------------+---------------------+
        

Hier sieht man, dass die Resulttabelle nun Abwärts nach der Datum-Spalte sortiert ist. Und so wollen wir ja auch die Resulttabelle in PHP auslesen.

Fragen zum aktuellen Thema

  1. Wie sortiere ich die Resulttabelle nach einer Spalte?
Wie sortiere ich die Resulttabelle nach einer Spalte?

Mit der Angabe ORDER BY kann man angeben nach welcher Spalte wie sortiert werden soll. Wenn man nach mehreren Spalten sortieren möchte muss man die Spalten mit Komma trennen. Jede einzelne Spalte kann ein ASC bzw. DESC enthalten.

Nach oben