Vinzenz Mai: MySQL - Query Statement gesucht

Beitrag lesen

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