Hallo Phil,
Wenn ich nun die Datensätze nach den Namen sortiere, (order by name) kann ich dann die Datensätze Schrittweise ausgeben, zum Beispiel das jede dritte Zeile angezeigt wird?
verstehe ich Dich richtig: Du bist nur an jedem dritten Datensatz interessiert, d.h. bei den vier Datensätzen Deines Beispiels möchtest Du _nach_ der Sortierung nur den dritten Eintrag haben? Ja, das geht auch.
Es sollte Dir einleuchten, dass es besser ist, nur die Daten vom DBMS anzufordern, die man verarbeiten will. Deswegen solltest Du nun Deine Abfrage umschreiben. Die Abfrage wird schon deutlich komplizierter. Du benötigst eine Benutzervariable und eine Unterabfrage (setzt übrigens MySQL 4.1.x oder höher voraus).
Deine Beispieldaten
1 | aaa.jpg | John
2 | bbb.jpg | Doe
3 | ccc.jpg | Jane
4 | ddd.jpg | Doe
1. Schritt: Wir zählen mit:
SET @a=0; -- Initialisieren einer Benutzervariablen
SELECT
@a:=(@a+1) position, -- Erhöhe den Wert bei jedem Datensatz um 1
num, -- die interessierenden Spalten
image,
name
FROM
tabelle -- Deiner Tabelle
ORDER BY -- sortiert nach der Spalte
name -- name
liefert bei Deinen Beispieldaten folgendes (mögliche) Ergebnis
position | num | image | name
--------------------------------
1 | 4 | ddd.jpg | Doe
2 | 2 | bbb.jpg | Doe
3 | 3 | ccc.jpg | Jane
4 | 1 | aaa.jpg | John
Beachte bitte, dass die Reihenfolge der ersten beiden Datensätze in der Ergebnismenge zufällig ist. Sie könnte somit auch umgekehrt sein.
Nun willst Du nur den dritten Datensatz haben:
SET @a=0; -- Initialisieren einer Benutzervariablen
SELECT
a.position,
a.num,
a.image,
a.name
FROM ( -- Du kannst statt Spalten einer Tabelle auch
SELECT -- die Spalten einer Abfrage abfragen
-- Das nennt man Unterabfrage
@a:=(@a+1) position, -- Erhöhe den Wert bei jedem Datensatz um 1
-- Gib der Spalte einen sprechenden Namen
num, -- die interessierenden Spalten
image,
name
FROM
tabelle -- Deiner Tabelle
ORDER BY -- sortiert nach der Spalte
name -- name
) a -- Gib der Unterabfrage einen Namen, damit
-- Du auf ihre Spalten zugreifen kannst
WHERE
[link:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_mod@title=MOD(position, rang) = 0
-- nur die Zeilen, deren Position ein
-- Vielfaches von 3 ist, d.h. jeden dritten
-- Datensatz
liefert die gewünschte Ergebnismenge (zumindest so, wie ich Dich verstanden habe):
position | num | image | name
--------------------------------
3 | 3 | ccc.jpg | Jane
Beachte bitte, das das SET-Statement und das SELECT-Statement in der gleichen Verbindung abgesetzt werden müssen. Ein typischer Fall für mysqli.
Freundliche Grüße
Vinzenz