Annäherung in mySQL Abfrage

Microhome

Erfahrenes Mitglied
Hallo ihr lieben,
ich habe mal eine Frage zum Thema Annäherung von Zahlen.
In meiner Datenbank habe ich eine Million Zahlen von 0 bis 256³. Dabei kommen einige Zahlen doppelt, andere überhaupt nicht vor.

Das Ergebnis einer Abfrage liefert mir einen Wert, zb. $search = 8936239. Ich möchte in meiner Datenbank nun den Wert suchen, der dieser Zahl am nächsten ist. Im Moment habe ich folgendes:

Code:
$res = mysql_query("SELECT * FROM template WHERE zahl >= \"$search\" ORDER BY zahl LIMIT 1");

Das Problem ist nur, dass er immer den nächst höheren Wert findet, sollte die Zahl nicht existieren. Nur nehmen wir an in der DB ist die nächst größere Zahl 8936247 (+8) und die nächst kleinere Zahl 8936237 (-2). Meine Variante würde mir dann den +8-Wert liefern. Irgendwie müsste ich immer +1; -1; +2; -2.. von meiner Zahl $search rechnen und schauen wann der Treffer GLEICH ist, aber das würde bei großen Lücken ja ewig dauern.

Habt ihr eine Idee, wie ich mein Problem lösen kann?
Vielen Dank und einen angenehmen Sonntag!

m!cro
 
Probier mal Folgendes:
Code:
SELECT
        `zahl`
  FROM
        (
            (SELECT `zahl`, ABS(`zahl`-$zahl) AS `diff` FROM `template` WHERE `zahl` < $zahl ORDER BY `zahl` DESC LIMIT 1)
        UNION
            (SELECT `zahl`, ABS(`zahl`-$zahl) AS `diff` FROM `template` WHERE `zahl` > $zahl ORDER BY `zahl` ASC LIMIT 1)
        ) AS `foobar`
  ORDER BY
        `diff`
  LIMIT 1
 
Hi Gumbo,
das scheint zu klappen Werds mal auf Herz und Nieren prüfen! Ich danke dir.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück