echo $begrüßung;
genau das ist mein Problem: welches weitere Sortierkriterium ich nehmen kann denn die ID kann ja größer oder kleiner sein, also kommt das nicht in Frage. Uhrzeit ist nicht hinterlegt... Irgendeinen guten Vorschlag?
Wenn du selbst nicht sagen kannst, welches die richtige Reihenfolge ist, wer soll es dir dann sagen? In dem Fall kannst du auch einfach die ID als zweites Sortierkriterium missbrauchen. ASC/DESC spielt ja dann auch keine Rolle. Das ist die einzige Möglichkeit eine bei jedem Sortiervorgang eindeutige Reihenfolge zu gewährleisten.
Wie bekommt man nun den vorigen und den nächsten Datensatz? Ohne Kopfstände gar nicht. Es gibt keinen einfachen Mechanismus, von einem Datensatz aus eine beliebige Anzahl davor und/oder danach zu wählen. Die einzige anhand einer Position wählende Klausel ist LIMIT. Der kann man aber nur einen absoluten Startwerte anhand der Position in der Ergebnismenge übergeben. Der Wert muss auch noch unveränderlich sein. Er kann durch MySQL nicht berechnet werden. Es gibt auch keinen Zeilenzähler für Ergebnismengen. Und man weiß die Position einer bestimmten ID in einer Ergebnismenge erst, wenn man sie beim Auslesen selbst mitzählt.
Mir fällt da nur ein,
... WHERE datum >= $datum AND ID > $aktID ORDER BY datum ASC, ID ASC LIMIT 1
für den nachfolgenden und
... WHERE datum <= $datum AND ID < $aktID ORDER BY datum DESC, ID DESC LIMIT 1
für den vorhergehenden Datensatz zu verwenden.
An diesem Beispiel sieht man mal wieder, dass eine ID als Sortierkriterium ungeeignet ist. Doch hier muss der Teufel in seiner Not dann wohl doch Fliegen fressen.
Eine andere Idee wäre, einen Paging-Mechanismus mit LIMIT zu implementieren. Dann könntest du, statt über die ID die Datensätze zu suchen, anhand der Seitenzahl die Datensatzmenge berechnen. Doch auch hier brauchst du ein eindeutiges Sortierkriterium. Der Vorteil wäre aber, dass du keine drei (einzelnen oder UNIONierten) Anfragen auf die DB loslassen musst.
echo "$verabschiedung $name";