Sortierproblem mysql-abfrage über mehrere Seiten
Manuel
- datenbank
0 fastix®0 Manuel
0 Stefan Bechtold0 Tom
Hi,
ich habe vor, bei einer größeren Datenbank die User so ausgeben zu lassen (php/mysql), daß immer nur 50 pro Seite erschjeinen.
Das wollte ich über LIMIT $limit1, $limit2 machen, wobei sich dann jeweils diese beiden Variablen etsprechend der Seitenzahl ändern.
Gleichzeitig ist es aber so, daß ich die Ausgabetabelle per Link in der Spaltenüberschrift nach dem Spaltenkriterium sortieren kann.
Es wäre schön, wenn eine einmal angezeigte Seite (Tabelle) aber dann auch wirklich so sortiert würde, d.h. mit eben dem Datenbestand der 1. Ausgangsseite.
Es ist aber so, daß ich z.B. nach User-ID ausgeben lasse, und wenn ich dann sortieren möchte, ein völlig anderer Datenbestand erscheint (logischerweise), nämlich der des neuen sql-befehls.
Gibt es eine Möglichkeit, z.b. Seite 3 der nach User-ID sortierten Tabelle mit genau diesem Datenbestand nach z.B PLZ sortieren zu lassen, ohne daß nun völlig andere Daten aus der Datenbank hierzu genommen werden?
Viele Grüße und frohes Fest im Voraus
Manuel
Moin!
Du hast genau drei Möglichkeiten:
[1] Du lässt die Sortierung ab der zweiten Seite, wie sie ist und/oder startest bei einer Neusortierung wieder bei Seite 1.
[2] Da Du ohnehin mit einer zweiten Logik arbeitest (Ich unterstelle mal, Du benutzt MySQL im Context von PHP, Perl, Java...) und kannst jeweils nur einen Befehl absetzen, die Rückgaben der Datenbank werden in einem Array gespeichert) kannst Du diesen Array mit den Mitteln Deines Contextes, also der Programmiersprache nach Deinen Wünschen sortieren.
[3] Solltest Du mehrere Befehle absetzen können, wäre es vorteilhaft, Du schreibst die Ergebnisse der ersten Abfrage in eine temporäre MySQL Tabelle und lässt diese sortiert ausgeben. Das Ergebnis gleicht [2]
Ich frage mich allerdings, was den Benutzern logischer erscheint. Ich vermute mal mit [1]- Es mach nämlich keinen Sinn "mittendrin" die Sortierung zu ändern. Aber das musst Du wissen, Du schreibst und kennst ja die Anwendung- ich nicht.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Ich frage mich allerdings, was den Benutzern logischer erscheint. Ich vermute mal mit [1]- Es mach nämlich keinen Sinn "mittendrin" die Sortierung zu ändern. Aber das musst Du wissen, Du schreibst und kennst ja die Anwendung- ich nicht.
Hi fastix®,
im prinzip hast Du da nicht ganz unrecht :-) Nagut, dann kann nämlich alles so bleiben, wie es ist :-))
Frohe Weihnachten
Manuel
Hi,
mach es Dir doch nicht so schwer. Du kannst es Dir doch richtig einfach machen:
1. Du übergibst bei jedem klick auf einen Link, der zur Ergebnisseite führt (z.B. nächste Seite, vorherige ~, Sortierungsänderung) zwei Variablen: $limit, $startindex
$limit beinhaltet dabei die Anzahl von gezeigten Datensätzen und $startindex den ersten Eintrag der gezeigt wird.
Die beiden Werte musst du eben berechnen und dann an die links übergeben, sollte ja keine probleme darstellen.
2. Du übergibst des weiteren eine Variable $sort und schreibst da den Namen des SQL Felds rein, über den Sortiert werden soll.
3. Du übergibsts eine Variable $order mit asc oder desc um aufsteigende oder absteigende Sortierung zu selektieren...
Alles andere ist Abfrage Kram mit if, beim erzeugen der Links, aber das wirst du ja schon hinbekommen :o)
Gesamt siehts dann so aus( Beispiel ): index.php?limit=20&startindex=40&sort=alter&order=desc
viel glück beim programmieren...
Weihnachts-Gruss
Stefan
viel glück beim programmieren...
Weihnachts-Gruss
Stefan
Hi Stefan, jaja, genauso habe ich es doch gemacht, mein Problem war ein ganz anderes, aber ist auch schon gelöst
Frohe Weihnachten
Manuel
Hallo,
- Du übergibst des weiteren eine Variable $sort und schreibst da den Namen des SQL Felds rein, über den Sortiert werden soll.
- Du übergibsts eine Variable $order mit asc oder desc um aufsteigende oder absteigende Sortierung zu selektieren...
index.php?limit=20&startindex=40&sort=alter&order=desc
Das sieht gefaehrlich aus. Sicherheitsmaessig.
Gefaehrlich, weil es jetzt das "desc", das "alter" und die Limit-Zahlen
vermutlich direkt in die SQL-Query einbauen wird.
Stichwort SQL Injection.
Also unbedingt:
Daneben duerfte auch mysql_escape_string()
nuetzlich sein, um den so zusammengebauten
Teil der SQL-Query zu entschaerfen.
http://www.php.net/manual/de/function.mysql-escape-string.php
Gruesse,
Thomas
benutze einen temporären Table inden du die 50 Ergebnisse einfügst und dort neu - sortiert ausließt.
mfG Markus
Hello Manuel,
genau an einer solchen Lösung stricke ich seit längerer Zeit und habe die Aufgabe nun mal endlich ganz oben auf meinem Zettel stehen, bzw. habe sie begonnen.
Die Schwierigkeit dabei sind das
1. Duplicate-Management
2. Rückwärtsblättern.
Allerdings habe ich die Lösung auf dem Papier bereits und vorwärts auch schon realisiert. Rückwärts kommt über die Feiertage dran. da kenn ich nix. Schließlich gibts schon einen Kunden, der für die Implementierung in seine Site ordentlich was zahlen wird.
Man braucht dafür entweder Sessions oder muss einen ziemlichen Klotz an Steuervariablen per hidden-Field mit sich rumschleppen.
Liebe Grüße aus http://www.braunschweig.de
Tom