Datensatzzeiger bewegen

  • Themenstarter Themenstarter Dunsti
  • Beginndatum Beginndatum
D

Dunsti

Ich will auf meiner Seite einen Webring anbieten.
Dazu habe ich, eine Tabelle in MySQL angelegt, wo die URL's der beteiligten Seiten gespeichert werden.
Für die Funktionen "nächste Seite" bzw. "vorherige Seite" müsste ich nun aus dieser Tabelle die Datensätze auslesen, die dem entsprechenden Datensatz für diese Seite vorangehen, bzw. folgen.
Beim ersten Datensatz wäre dann der "vorangehende" Datensatz der letzte in der Liste. Entsprechend beim letzten Datensatz ist der "nächste" dann wieder der Erste.

Wie kann ich die entsprechenden Datensätze in meiner Datenbank finden, wenn ich von dem vorangehenden bzw. folgenden Datensatz noch keine Inhalte kenne, nach denen ich mit SELECT wählen könnte ?

Gruß
Dunsti
 
Gar nicht!

Es gibt aber einen Trick den ich auch verwende, wenn auch nicht für einen Webring. Du machst in der Tabelle in der du die URLs hast einfach eine Spalte mit auto_increment dazu. Da steht dann immer eine Zahl drin, die beim hinzufügen neuer Datensätze automatisch hochgezählt wird. Die kennst du ja. Ein Problem sehe ich nur wenn du einen Datensatz löscht. Dann musst du eine Routine schreiben die das abfängt wenn eine id nicht existiert. Da musst du ein wenig basteln.
 
Da steht dann immer eine Zahl drin, die beim hinzufügen neuer Datensätze automatisch hochgezählt wird. Die kennst du ja. Ein Problem sehe ich nur wenn du einen Datensatz löscht.
Genau das ist das Problem, denn eine auto_increment-Spalte hab ich sowieso drin.
Ich dachte eher, daß mit der Funktion mysql_data_seek was gehen könnte, weiß aber nicht genau wie.

Gruß
Dunsti
 
Mit mysql_data_seek geht das. Dazu musst du dir nur merken, welche Zeile du zuletzt hattest.

Angenommen, du bist aktuell bei der 10. Seite des Webrings.

Der Link "Vorherige Seite" wäre dann so aus der Datenbank zu holen:

Code:
mysql_data_seek( $result, $i - 1 > 0 ? $i - 1 : 0 ) );
$linkinfo = mysql_fetch_row( $result );

// nächste Seite:
mysql_seek_data( $result, $i + 1 );
$linkinfo = mysql_fetchrow( $result );

Jetzt musst du nur noch dafür sorgen, dass du keine rows < 0 oder > mysql_num_rows() holst...

Gruss
Alki
 
habs mittlerweile gelöst ... wenn auch mit kleinem Haken:
PHP:
do {
     $id = ++$id; // $id erhöhen
     if ($id > $numberrows) {$id=0;}; //nach dem letzten Datensatz wieder vorne anfangen
     $sql = "SELECT * FROM $tablename WHERE id = \"$id\"";
     $result = mysql_query($sql,$db); //gibt FALSE, wenn kein Satz mit dieser $id existiert
}
while (mysql_num_rows($result)==False); //solange bis eine $id passt
$row = mysql_fetch_row($result);

$id wird übergeben (jede Seite hat ne eigene, die mit auto_increment erzeugt wird)
$numberrows hab ich auf 100 gesetzt, da ich mit mysql_num_rows() die Anzahl der tatsächlichen Zeilen bekomme, aber die ID größer sein kann (z.B. wenn man mittendrin eine Zeile rauslöscht)

Gruß
Dunsti
 
Zurück