n'abend,
Vorbedingungen:
* Wir sprechen von MySQL 5
* Datensätze haben fortlaufenden PrimaryKey. Da Datensätze aber gelöscht werden können (und für die aktuelle Abfrage ggf. nicht interessant sind) sind die IDs nicht wirklich fortlaufend, sondern "löchrig". Z.B. 1, 5, 6, 7, 23, 24, 100.
* Eine (generierte) Seite zeigt immer nur eine bestimmte Anzahl Datensätze (um zu vermeiden, dass eine Seite 12345123232 Einträge enthält...).
* Ein Datensatz weiss nicht auf welcher Seite er zu finden ist, da das ganze dynamisch berechnet wird. (Stichwort: "LIMIT 12, 34", wissenschon™)
Problemstellung:
Ermittle die Seite, auf der der Datensatz mit der ID %ID% zu finden ist.
Bisherige Lösung:
- Lade alle relevanten IDs (sortiert) => DBIDs
- Initialisiere Zähler := 0
- FOR %Y% IN DBIDs
4-1) Erhöhe Zähler
4-2) IF %Y% = %X% THEN RETURN CEILING( Zähler / DatensätzeProSeite )
4-3) IF %Y% > %X% THEN RETURN Not-Found-till-page: CEILING( Zähler / DatensätzeProSeite )
Überlegung zur Optimierung:
Ist es möglich nur jeden X-ten Datensatz zu bekommen? Wenn ich weiss, dass jede Seite max. 15 Datensätze anzeigt, dürfte es mir doch genügen jede 15. ID zu bekommen, um einen Range-Vergleich zu machen. Das würde bedeuten, dass ich irgendwie mit einer Datenbank-internen Variable »CurrentRowNumber« arbeiten können müsste. Mir ist diesbezüglich aber nichts fundiertes bekannt.
Jemand ne bessere Idee?
weiterhin schönen abend...
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|