phpbar.de logo

Mailinglisten-Archive

Re: [php] Blättern in Ergebnismenge

Re: [php] Blättern in Ergebnismenge

Ringo Großer swek at gmx.net
Mon Aug 1 16:42:45 CEST 2005


Hallo Matthias,

Matthias Stierli wrote:
> Aber trotzdem noch die Frage aus Interesse, wie würde denn eine
> SQL-Abfrage aussehen, bei welcher ich als Ergebnis den vorherigen und
> nachfolgenden Datensatz des von mir ausgewählten Satzes bekäme,
> natürlich inkl. den Bedingungen, oder müsste ich da das gesamte
> Ergebnis nachher mit PHP durchsuchen?? Wahrscheinlich gäbe es ja
> keine direkte SQL-Abfrage..

Die Bedingung (WHERE) sowie die Sortierreihenfolge (ORDER) sollte
beim Blättern konstant bleiben. Was du mit jeder neuen Query übergibst,
ist Position und Offset (LIMIT) des aktuellen Ausschnittes.

z.B. 30 Datensätze pro Page, 100 Datensätze gesamt, aktuelle Seite 2

d.h. der erste Datensatz der aktuellen Page 2 hat die Position 30, offset
addieren für die Position des ersten Datensatzes der nächsten Page,
offset subtrahieren für Position des ersten Datensatzes der vorigen Page,
ggf noch gegen die Grenzen der Gesamtmenge prüfen, weil die Position
nicht kleiner 0 und nicht größer als die Gesamtmenge werden darf.

Die Query für die Page 3 könnte also folgendermaßen aussehen:
SELECT fields
FROM table
WHERE condition=0
ORDER BY fields
LIMIT 60,30 // hole 30 Datensätze ab Position 60 der Ergebnismenge

Eine kleine Hürde bei der Verarbeitung der Position ist die Tatsache,
dass man gern mit 1 anfängt zu zählen, in MySQL das LIMIT aber
mit 0 beginnt.

Mit diesem System kannst du aus der aktuellen Position heraus und
anhand des Offset
- die Anzahl der Seiten bestimmen,
- die aktuelle Seite,
- die Positionen jeder einzelnen Seite direkt,
- die Position der vorigen und der nächsten Seite
- die Positionen der ersten und letzten Seite

Bau dir am besten eine function oder class, welche genau diese
Berechnungen erledigt. Dann kannst du mit den Informationen aus der
Klasse deine Seiten-Blättern-Navigation füttern.

regards, Ringo


php::bar PHP Wiki   -   Listenarchive