Seite 1 von 1

Liste mit Sortieroption

Verfasst: 26.09.2008 10:04
von sommer
Hallo,

ich würde gern eine Liste, ähnlich wie die Mitgliederliste, erstellen.

Die Datensätze sollen ebenfalls auf mehreren Seiten ausgegeben werden, ebenfalls soll eine Sortierung (Aufsteigend/Absteigend) vorhanden sein.

Auf der ersten Seite würde ich die Sortierung hin bekommen, aber wenn es weiter gehen soll, auf z.B. Seite 2, weiß ich nicht wie man das geschickt löst.
Die memberlist.php hat mir hier leider nicht weiterhelfen können.

Angenommen ich habe eine Liste mit Namen und Datum und die Liste über das Datum aufsteigend sortiert, möchte sie dann aber aufsteigend sortieren, muss ich dann für jede Sortieroption eine neue Seitenliste (1,2,3) schreiben?
Also Seite 1,2,3 usw. aufsteigend, beim klick auf absteigend wird dann durch eine if Verzweigung Seite 1,2,3 usw. absteigend geladen. Das würde dann bedeuten, dass ich für jede Sortieroption einen else Zweig hinzufügen müsste, oder?

Ooooooder kann man das auch anders, einfacher lösen? :cookie:

Verfasst: 29.09.2008 18:22
von StarWolf3000
Wäre zuerst zu klären, woher die Datensätze stammen sollen.

Wenn du die Daten aus einer MySQL-Tabelle liest, kannst du das Sortieren und Einschränken auf Datensatz X bis Y schon innerhalb des SQL-Befehls angeben mit:

Code: Alles auswählen

SELECT * FROM liste ORDER BY namen ASC LIMIT 0, 30
Dieses Beispiel liest die ersten 30 Datensätze aus der Tabelle liste und sortiert sie nach Alphabet aufsteigend

Aufbau:

Code: Alles auswählen

SELECT * FROM liste
Lies alle Datensätze und Felder aus der Tabelle liste

Code: Alles auswählen

ORDER BY namen ASC
Sortiere die Ergebnisse nach namen alphabetisch aufsteigend.

Code: Alles auswählen

LIMIT 0, 30
Schränke die ausgegebenen Datensätze ein auf Position 0 (erster Datensatz in der Tabelle), Anzahl 30.

Wenn du einen Parameter an die URL übergibst, bspw. ?seite=1 oder so, dann kannst du damit die ausgegebenen Datensätze berechnen lassen, und zwar so:

Code: Alles auswählen

$seite = intval(isset($_GET['seite']) ? $_GET['seite'] : (isset($_POST['seite'] ? $_POST['seite'] : 0)));

$proseite = 30;

$limiter = $seite*$proseite;

$sql = "SELECT * FROM liste ORDER BY namen ASC LIMIT " . $limiter . ", " . $proseite;

Verfasst: 29.09.2008 18:37
von P7BB
StarWolf3000 hat geschrieben:

Code: Alles auswählen

$seite = intval(isset($_GET['seite']) ? $_GET['seite'] : (isset($_POST['seite'] ? $_POST['seite'] : 0)));

$proseite = 30;

$limiter = $seite*$proseite;

$sql = "SELECT * FROM liste ORDER BY namen ASC LIMIT " . $limiter . ", " . $proseite;
Müsste es nicht auch heißen $limiter2 = $seite*proseite+$proseite;
und dann bei der sql-abfrage LIMIT ".$limiter.", ".$limiter2." ?

Verfasst: 29.09.2008 18:52
von Boecki91
Nein, bei 2 Zahlen ist die 1. Zahl ist das/der Offset und die 2. Zahl das Limit und du willst ja nicht $prosite*$seite Zeilen haben ;)