Liste mit Sortieroption

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
sommer
Mitglied
Beiträge: 344
Registriert: 05.01.2004 12:05

Liste mit Sortieroption

Beitrag 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:
Benutzeravatar
StarWolf3000
Mitglied
Beiträge: 1019
Registriert: 25.07.2005 10:20
Wohnort: Stolpen
Kontaktdaten:

Beitrag 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;
MOD-Einbauhilfe und Installationen über ICQ, TeamSpeak 2/3 und TeamViewer. Support nur im Forum, eingeschränkt per TeamViewer, aber nicht mehr per PN! • KB:knigge
P7BB
Mitglied
Beiträge: 383
Registriert: 15.07.2008 19:40

Beitrag 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." ?
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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 ;)
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „Coding & Technik“