Hallo wahsaga,
Für mein Weblog möchte ich bei der Anzeige eines Beitrages auch die Daten haben, die ich zur Verlinkung des vorherigen und nächsten Eintrages benötige.
SELECT *,
( SELECT b4.bkey -- Gib mir den Schlüssel
FROM blog b4
WHERE b4.bdate = ( -- dessen Datumseintrag
SELECT MAX(b5.bdate) -- der größte ist
FROM blog b5 -- von allen Einträgen, deren
WHERE b5.bdate < b1.bdate -- Datum kleiner ist als das des
-- betrachteten Datensatzes
)
) AS prev
( SELECT b2.bkey -- analog :-)
FROM blog b2
WHERE b2.bdate = (
SELECT MIN(b3.bdate)
FROM blog b3
WHERE b3.bdate > b1.bdate
)
) AS next
FROM blog b1
WHERE bkey = 'testeintrag'
setzt wie Dein Statement voraus, dass auf bdate ein UNIQUE-Index liegt, da es bei gleichen Einträgen in dieser Spalte zum Fehler "Subquery liefert mehr als eine Zeile zurück" kommt. Natürlich könnte ich dem mit LIMIT 1 (im äußeren Subquery) entgegenwirken, das Ergebnis wäre ein nicht erreichbarer Eintrag. Vergleichbares sollte bei Deinem Statement übrigens ebenfalls der Fall sein. EXPLAIN kannst Du selber darauf anwenden. *g*
MySQL-Version ist aktuell 4.1.18-nt, bzw. auf meinem Server beim Provider irgendwas > 4.1)
Getestet mit 4.1.16-nt, glücklicherweise hatte ich in meinen Testdaten zwei Einträge mit gleicher Zeit, so dass ich dieses Problem nicht übersehen konnte.
Freundliche Grüße
Vinzenz