Moin!
Naja. Ich denke wir machen den letzten Typo raus und geben als Lösungen:
SELECT `id`, `datum`, datediff('9999-12-31',`datum`) as `temp` FROM `tabelle`
WHERE `datum` <= '2011-09-15'
ORDER BY `temp`
LIMIT 0,5;
oder:
SELECT `id`, `datum`
FROM (
SELECT `id`, `datum` FROM `tabelle`
WHERE `datum` <= '2011-09-15'
ORDER BY `datum` DESC
LIMIT 0,5
)
ORDER BY `datum`;
an, die ähnlich performant sein dürften.
Noch spannender wäre eine Spalte rev_datum einzufügen, diese mit einem Index zu versehen, einmalig
UPDATE
tabelleSET
rev_datum=datediff('9999-12-31',
datum);
auszuführen (und das bei jedem Eintrag/Update für die Zeile zu wiederholen) und dann
SELECT `id`, `datum` FROM `tabelle`
WHERE `datum` <= '2011-09-15'
ORDER BY `rev_datum`
LIMIT 0,5;
in Auftrag zu geben. Lohnt aber nur dann wenn die Anzahl und Ergebnismenge der SELECTS hoch ist und die der INSERTS/UPDATES niedrig. Bricht aber mit den Regeln der Normalisierung.
Vermutlich benötigt der Aufwand zu Lösung 3 mehr Arbeits- und Rechenzeit als jemals durch sämtliche Abfragen verursacht wird ...
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix