MySQL doppelt sortieren
bleicher
- datenbank
Grüße,
in letzter zeit stell ich hier unhöfflich viele fragen, was wohl an den ferien, langweile und verstärkter webaktivität liegt. ich bitte um
entschuldigung falls mein verhalten für aufdringlich befunden wird.
zur frage:
gegeben sind N einträge, in der tabelle der ID/text/timestamp form.
gewünscht:ausgeben von eintraggruppen - jeweils X, um durch diese "blättern" zu können.
soweit einfach - ich gebe parameter Y (seitennumer) mit - und errechne daraus
LIMIT Y*X,Y*X+X ORDER BY timestamp
das hat aber ein großes nechteil -
bei eintraganzahl von N*X+z mit z<X wird die letzte/neuste Seite "unvollständig" aussehen. gewünscht wäre natürlich ausgleichen mit den hinteren/älteren eintragblöcken.
0 1 2
abcd/efgh/jk <-
das kann man umgehen, indem man ORDER BY timestamp DESC einsetzt - in diesem fall rechnet man "vom ende" aus.
0 1 2
jkhg/fedc/ba
Allerdings würde in diesem fall seite 0 die neusten einträge beinhalten.zudem würde sich die seitennumerierung ständig ändern, und indexierung wäre unmöglich.
0 1 2 3
nmlk/jhgf/edcb/a
kann man dies lösen?
also in der form
0 1 2 3
abcd/efgh/jk[lm/no]
^zum block 3 gehören zwar nur die letzten beiden, mit ausgegeben werden aber auch N blöcke davor bix X einträge ausgegeben wurde.
ich kann dies rätsel nicht lösen.
hoffe die frage ist nicht zu wirr gestellt.
MFG
bleicher
Tach.
gegeben sind N einträge, in der tabelle der ID/text/timestamp form.
gewünscht:ausgeben von eintraggruppen - jeweils X, um durch diese "blättern" zu können.soweit einfach - ich gebe parameter Y (seitennumer) mit - und errechne daraus
LIMIT Y*X,Y*X+X ORDER BY timestamp
Das liefert Dir aber nicht X Beiträge ab Y*X. LIMITs zweiter Parameter gibt einfach nur die Anzahl der Datensätze an, nicht den Index des letzten. Falls Deine Seitennummer Y bei 0 beginnt, also eher LIMIT (Y*X + 1), X
.
bei eintraganzahl von N*X+z mit z<X wird die letzte/neuste Seite "unvollständig" aussehen. gewünscht wäre natürlich ausgleichen mit den hinteren/älteren eintragblöcken.
Hmm, ich als Nutzer fände das etwas verwirrend, wenn beim Blättern auf der letzten Seite plötzlich Einträge von der Vorgängerseite auftauchen. Wie auch immer ... Das "Problem" kriegst Du relativ einfach in den Griff. Du brauchst dazu ja nur zu wissen, wie viele Einträge es insgesamt gibt. Falls die Differenz zwischen dieser Anzahl und der Seitengröße X kleiner ist als der Startindex Deiner LIMIT-Klausel, verlegst Du diesen Index an die berechnete Stelle. Die Differenz gibt Dir ja an, an welchem Index die letzte komplette Seite beginnt.
Grüße,
Hmm, ich als Nutzer fände das etwas verwirrend, wenn beim Blättern auf der letzten Seite plötzlich Einträge von der Vorgängerseite auftauchen. Wie auch immer ... Das "Problem" kriegst Du relativ einfach in den Griff. Du brauchst dazu ja nur zu wissen, wie viele Einträge es insgesamt gibt. Falls die Differenz zwischen dieser Anzahl und der Seitengröße X kleiner ist als der Startindex Deiner LIMIT-Klausel, verlegst Du diesen Index an die berechnete Stelle. Die Differenz gibt Dir ja an, an welchem Index die letzte komplette Seite beginnt.
stimmt - ich bin irgendwie zu sehr in der speziallösung verharkt - differenzziertes behandeln ist natürlich einfacher in dem fall ,)
MFG
bleicher