Rolf B: VOR und NACH Folger eine SELECT Abfrage ermitteln

Beitrag lesen

Hallo Ingrid,

Test nachgeholt - funktioniert so. IFNULL ist eine MYSQL-Spezialität, die offizielle SQL Funktion heißt COALESCE.

Ich habe dann auch noch einen Explain gemacht. Meine Test-Table hatte 30 Rows, und das Ergebnis war, dass er die Subselects macht und dann einen full index scan. Gefiel mir nicht, und ich habe diese Variante probiert:

SELECT id, preis FROM test.entries WHERE id = (SELECT MAX(id) FROM test.entries WHERE id < @foo)
union all
SELECT id, preis FROM test.entries WHERE id = @foo
union all
SELECT id, preis FROM test.entries WHERE id = (SELECT MIN(id) FROM test.entries WHERE id > @foo)

Ergebnis waren zwei full table Scans für vorgänger und Nachfolger, und ein Single Row Select für den ID-Satz. Gefällt mir auch nicht, aber es kann an der geringen Datenmenge liegen.

Du musst die Explains für deine DB selbst nochmal laufen lassen, falls die signifikant größer ist.

Rolf

--
sumpsi - posui - obstruxi