Hi,
(
(SELECT
nachrichtFROMnachrichtenwhereid< 100 ORDER BYidLIMIT 1)
[link:http://dev.mysql.com/doc/refman/5.1/de/union.html@title=UNION]
(SELECTnachrichtFROMnachrichtenwhereid= 100)
[link:http://dev.mysql.com/doc/refman/5.1/de/union.html@title=UNION]
(SELECTnachrichtFROMnachrichtenwhereid> 100 ORDER BYidDESC LIMIT 1)
) ORDER BYid;
Vom Prinzip her ja.
Allerdings sollte die ID bekanntlich nicht als (primäres) Sortierkriterium herhalten, und der OP hatte ja auch explizit nach einer Sortierung nach dem Datum gefragt.
Wenn man das Datum bereits als Suchkriterium vorliegen hat, dann ist es simpel, dann müsste in deinem Vorschlag nur ID jeweils durch die Datumsspalte ersetzt werden.
Wenn jedoch von der vorliegenden ID einer Nachricht ausgehend die jeweils vorherige und nächste gesucht werden sollen, dann müsste man das Datum zu dieser ID ggf. erst noch mit einem Subselect ermitteln.
Des weiteren bietet es sich m.E. noch an, innerhalb der einzelnen SELECTs noch ein Kennzeichen zu setzen, an welchem in der Verarbeitung leicht erkennbar ist, um welchen Datensatz es sich denn nun handelt – etwa so,
~~~sql
(
(SELECT …, 'previous' AS position FROM …)
UNION
(SELECT …, 'current' FROM …)
UNION
(SELECT …, 'next' FROM …)
) ORDER BY …
Das macht es anschließend einfacher, zu erkennen um „welche“ Nachricht es sich beim jeweiligen Datensatz handelt. Denn ein vorheriger/nächster müssen ja nicht unbedingt vorhanden sein – und welcher Fall tatsächlich vorliegt „von Hand“ anhand der Datumsangaben erst ermitteln zu müssen o.ä. wäre eher unschön.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?