Nächsten Datensatz ermitteln

Hallo zusammen,

in einem Formular werden Kundendaten angezeigt. Darunter befindet sich jeweils ein Links- und Rechtspfeil, die den vorherigen oder nächsten Datensatz aufrufen.

Nur wie kann der vorherige oder nächste Datensatz ermittelt werden?

Ich habe dazu noch keinen Code geschrieben.

Gruß

Moin moin!

Hallo zusammen,

in einem Formular werden Kundendaten angezeigt. Darunter
befindet sich jeweils ein Links- und Rechtspfeil, die den
vorherigen oder nächsten Datensatz aufrufen.

Nur wie kann der vorherige oder nächste Datensatz ermittelt
werden?

Dazu gibt es verschiedene Herangehensweisen. Die einfachste wäre anhand der ID des aktuellen Datensatzes den nächsten darüber oder darunter zu ermitteln. Da aber auch einige IDs mal fehlen können kann hier nicht einfach mit +1 bzw. -1 gearbeitet werden. Aber:

a)

SELECT \* FROM `tabelle` WHERE `id`
b) 

    SELECT \* FROM `tabelle` WHERE `id`\>123 ORDER BY `id` ASC LIMIT 0,1



Diese beiden Querys würden dir den entsprechenden Datensatz davor oder dahinter ausgeben - mit der ID als Grundlage. Undzwar funktioniert das so, dass in der WHERE-Bedingung steht, dass alle Datensätze mit einer ID kleiner bzw. größer als 123 (die ID des aktuellen Datensatzes) ausgelesen werden sollen. Diese sortiert die Datenbank dann aufgrund des ORDER BY nach der ID undzwar absteigend (DESC) bzw. aufsteigend (ASC). Zum Schluss wird nurnoch gesagt, dass man nur den ersten Datensatz haben will (LIMIT 0,1 - 0 ist die Startposition; 1 die Anzahl Datensätze).
a) Liest also den nächsten Datensatz "links" aus, b) "rechts".

Nachteil dieser Geschichte: Man kann die Datensätze nur in der Reihenfolge "durchscrollen", wie sie in die Datenbank gelangt sind, nicht aber nach z.B. Name sortiert. Hierfür könnte man aber alle IDs der Datensätze auslesen - nach dem jeweiligen Feld sortiert - und temporär in ein Array speichern, vorzugsweise ein Array in der Session. Das könnte dann zum Beispiel so aussehen:



    
    if (isset ($\_SESSION['client\_list']) === FALSE
    OR empty ($\_SESSION['client\_list']) == TRUE
     )
    {
     $\_SESSION['client\_list'] = array ();
    }
    
    $sSql = 'SELECT `id` FROM `tabelle` ORDER BY `name` ASC';
    
    $rResult= mysql\_query ($sSql);
    
    while ($aResult = mysql\_fetch\_assoc ($rResult))
    {
     $\_SESSION['client\_list'][] = $aResult['id'];
    }




Dann kannst du einfach anhand der aktuellen ID die Position im Array auslesen:



    
    $iPosition = array\_search (123, $\_SESSION['client\_list']);
    
    $iIdPrevious = $\_SESSION['client\_list'][$iPosition-1];
    $iIdNext = $\_SESSION['client\_list'][$iPosition+1];




Allerdings solltest du vorher noch prüfen, ob der Datensatz davor und dahinter überhaupt existiert, den am Anfang und am Ende ist ja nunmal Schluss. Entsprechend gibt es bei 200 Datensätzen keine Position -1 und 200 (es wird immer bei 0 begonnen zu zählen, ergo sind 200 Datensätze auf die Positionen 0-199 verteilt).



> Ich habe dazu noch keinen Code geschrieben.   
>   
>   
> Gruß


Ich hoffe, dass dir das ein wenig hilft.

MfG
Lutz

Danke!
Hatte leider noch keine Zeit das auszprobieren, aber danke schon einmal im Voraus!