ID des vorherigen oder nächsten DS in tabelle
michael
- php
hallo,
ich habe eine Liste mit Datenbankeinträgen.
Klickt man auf einen, dann gelangt man zu einer Detailseite auf der die entsprechenden Details zum Datensatz angezeigt werden.
Auf diesen Detailseiten sollen nun Links zum Durchblättern stehen,
d.h. Links mit denen man zum nächsten oder vorherigen Datensatz springen kann ohne den Umweg über die o.g Liste zu gehen.
Gibt es eine php-Funktion, die einem die ID des jeweils letzen oder nächsten Datensatzes zurückliefert?
oder wie geht man sowas an?
grüße,
michael
Hello,
ich habe eine Liste mit Datenbankeinträgen.
Klickt man auf einen, dann gelangt man zu einer Detailseite auf der die entsprechenden Details zum Datensatz angezeigt werden.Auf diesen Detailseiten sollen nun Links zum Durchblättern stehen,
d.h. Links mit denen man zum nächsten oder vorherigen Datensatz springen kann ohne den Umweg über die o.g Liste zu gehen.Gibt es eine php-Funktion, die einem die ID des jeweils letzen oder nächsten Datensatzes zurückliefert?
oder wie geht man sowas an?
Das wire eines meine nächten Theman sein.
eine SQL kennt keine vorige oder nächste. Die Schicht darunter hat diese Informationen aber noch. siehe btrieve.
Wenn man bei SQL eine solche dynamisch organisierte Funktion benötigt, muss man sie neu erfinden. Das geht aber. Man benötigt einen Duplicate-Managing-Index dafür.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi, danke für deine antwort.
Wenn man bei SQL eine solche dynamisch organisierte Funktion benötigt, muss man sie neu erfinden. Das geht aber. Man benötigt einen Duplicate-Managing-Index dafür.
ähhh... sorry , was für ein ding??
ich muss das nicht unbedingt auf DB-Seite schon lösen...
mir würde auch eine idee reichen, wie man das auf php-seite irgendwie drehen kann...?
irgendwie ist mir deine antwort zu hoch ;-))
gehts auch ne nummer einfacher? ;-)
grüße,
michael
Hi,
mir würde auch eine idee reichen, wie man das auf php-seite irgendwie drehen kann...?
na, das liegt doch auf der Hand: PHP kann nur diejenigen Daten verarbeiten, die es von der DB erhalten hat. Also selektiere die entsprechenden Datensätze.
Cheatah
yo,
na, das liegt doch auf der Hand: PHP kann nur diejenigen Daten verarbeiten, die es von der DB erhalten hat. Also selektiere die entsprechenden Datensätze.
das wäre zuviel des guten, immer mehrere datensätze zu übermitteln, wenn man letztlich nur einen datensatz anzeigen lassen will. besser auch nur einen übermitteln und somit für weniger traffic sorgen.
Ilja
Hello,
yo,
na, das liegt doch auf der Hand: PHP kann nur diejenigen Daten verarbeiten, die es von der DB erhalten hat. Also selektiere die entsprechenden Datensätze.
das wäre zuviel des guten, immer mehrere datensätze zu übermitteln, wenn man letztlich nur einen datensatz anzeigen lassen will. besser auch nur einen übermitteln und somit für weniger traffic sorgen.
Man benötigt die Kenndaten des "vorigen", des aktuellen und es "nächsten" oder eine Strategie, die das liefert. Dazu muss man erst einmal definieren, was der nächste Datensatz ist.
Angenommen, die Sortierung geht über den Nachnamen und ich lande in einer Serie "Meier". Wer ist da der nächste?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Man benötigt die Kenndaten des "vorigen", des aktuellen und es "nächsten" oder eine Strategie, die das liefert. Dazu muss man erst einmal definieren, was der nächste Datensatz ist.
nein tom, braucht man nicht. wie bereits geschrieben, ist limit dafür eine sehr nützliche funktion, die mysql anbietet.
Angenommen, die Sortierung geht über den Nachnamen und ich lande in einer Serie "Meier". Wer ist da der nächste?
ORDER BY nachnamen LIMIT $aktueller_index+1, 1
Ilja
Hello,
Man benötigt die Kenndaten des "vorigen", des aktuellen und es "nächsten" oder eine Strategie, die das liefert. Dazu muss man erst einmal definieren, was der nächste Datensatz ist.
nein tom, braucht man nicht. wie bereits geschrieben, ist limit dafür eine sehr nützliche funktion, die mysql anbietet.
Angenommen, die Sortierung geht über den Nachnamen und ich lande in einer Serie "Meier". Wer ist da der nächste?
ORDER BY nachnamen LIMIT $aktueller_index+1, 1
Du hast nicht zu Ende gedacht, wie es leider die meisten Datenbankanwender machen.
Deine Aussage mag für einen Single-User-Betrieb noch zutreffen, wenn dieser User auch nur eine Applikation auf die Datenbank hat oder benutzt zur selben Zeit.
In einem Multiuser-Umfeld mit dynamischen Daten ist die einfache Methode mit Offset und Limit vollkommen ungeeignet.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Du hast nicht zu Ende gedacht, wie es leider die meisten Datenbankanwender machen.
ich denke, man kann nicht so pauschale aussagen machen, es sein den man kann die allgemeingültigkeit zeigen.
In einem Multiuser-Umfeld mit dynamischen Daten ist die einfache Methode mit Offset und Limit vollkommen ungeeignet.
ich weiss nicht genau, auf welche probleme du ansprichst, du musst schon konkreter werden.
Ilja
Hello,
Du hast nicht zu Ende gedacht, wie es leider die meisten Datenbankanwender machen.
ich denke, man kann nicht so pauschale aussagen machen, es sein den man kann die allgemeingültigkeit zeigen.
Wo steckt bei der Aussage der Allgemeingültigkeitsanspruch?
Der erste Teil erstreckt sich exact auf Dich und der zweite auf eine Untermenge der Datenbankanwender (wobei hier die Anwender von z.B. Access oder MySQL oder ... gemeint sind, also Leute die mittels der Tools oder SQL was "entwickeln"). 70% der Datenbankanwwendungsentwickler, die ich beruflich kennengelernt habe, hatten Problemem mit dynamischem Verhalten. Deshalb bin ich nämlich meistens bei ihnen...
In einem Multiuser-Umfeld mit dynamischen Daten ist die einfache Methode mit Offset und Limit vollkommen ungeeignet.
ich weiss nicht genau, auf welche probleme du ansprichst, du musst schon konkreter werden.
Wieso "muss" ich das? Ich könnte es tun, aber nun habe ich eigentlich gar keine Lust mehr - jedenfalls nicht in diesem Thread.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
yo,
Wieso "muss" ich das? Ich könnte es tun, aber nun habe ich eigentlich gar keine Lust mehr - jedenfalls nicht in diesem Thread.
du musst natürlich nicht, in bezug auf zwang. aber wenn du sagst, es gibt probleme damit, dann wäe es hilfreich zu wissen, von welchen problemen du genau sprichst. vielleicht läßt sich ja einiges davon klären.
Ilja
yo,
Gibt es eine php-Funktion, die einem die ID des jeweils letzen oder nächsten Datensatzes zurückliefert?
oder wie geht man sowas an?
es gibt wie tom schon gesat hat keine solche funktion. aber es ist einfach sich etwas zu basteln, was genau das bewirkt, sogar unabhängig von der abfrage, die allerdings von seite zu seite mitgelifert werden muss. ich gehe mal einfach davon aus, du benutzt mysql als dbms.
meine idee besteht aus drei dingen
die datenbankeinträge müssen eine spalte für einen zeit/datumswert besitzen, timestamp wäre eine möglichkeit. dies ist wichtig, da ja beim blättern wieder neue einträge kommen können.
die abfrage ist mit der LIMIT abfrage auf genau einen wert beschränkt, wobei sich der eine index immer um eins erhöht, wenn vorgeblättert wird oder um eins erniedrigt, wenn zurück geblättert wird.
die abfrage wird von seite zu seite übermittelt. dies geht mit der GET/POST methode oder aber auch mit einer session. wenn die abfrage immer gleich ist, kann man auch einfach nur das datum und den index übermitteln.
punkt eins und zwei sehen dann in etwas so aus:
SELECT spalte1, spalte2...
FROM tabelle1, tabelle2...
WHERE bedingungen1....
AND spalte_datum <= $zeitwert
LIMIT $laufender_index, 1
Ilja
Hallo,
Auf diesen Detailseiten sollen nun Links zum Durchblättern stehen,
d.h. Links mit denen man zum nächsten oder vorherigen Datensatz springen kann ohne den Umweg über die o.g Liste zu gehen.
Vielleicht hilft der Ansatz von http://www.vnunet.de/testticker/internet/article.asp?ArticleID=20021008510&Page=3. Mein Code ist dort online ziemlich verhackstueckt worden (vor allem durch die <br>-Tags) -- hier mal das Original (mit Anpassung von $PHP_SELF in $_SERVER['PHP_SELF']):
<?php
$anzahl=55;
$schritt=10;
$geteilt=$anzahl / $schritt;
$rest=$anzahl % $schritt;
for($i=0;$i<=$geteilt-1;$i++)
{
print "<a href="{$_SERVER['PHP_SELF']}?ab=".intval($i*$schritt)."&anz=$schritt">".intval($i+1)."</a> \n";
}
if($rest>0)
{
print "<a href="{$_SERVER['PHP_SELF']}?ab=".intval($i*$schritt)."&anz=$rest">".intval($i+1)."</a>\n";
}
?>
MfG, Thomas
Hi,
Gibt es eine php-Funktion, die einem die ID des jeweils letzen oder nächsten Datensatzes zurückliefert?
Bezüglich welcher Ordnung? Datensätze in einer Datenbank haben keine "natürliche" Ordnung.
cu,
Andreas