Ik denk dat het makkelijkste is om de eerste rij te selecteren die eronder ligt en de eerste die erboven ligt.
<?php
$rij; //hier komt de juiste rij in te staan
$aantal = 800; //vull maar in
$query = "SELECT * FROM tabel WHERE waarde <=".$aantal." ORDER BY waarde DESC LIMIT 1";
$onder = mysql_fetch_array(mysql_query($query));
$query = "SELECT * FROM tabel WHERE waarde >=".$aantal." ORDER BY waarde LIMIT 1";
$boven = mysql_fetch_array(mysql_query($query));
if( ($boven-$aantal) >( $aantal-$onder) ){
$rij = $onder; //de rij onder $aantal ligt het dichtste bij
}else{
$rij = $boven; //de rij boven $aantal ligt het dichtste bij
}
//wat je er verder mee wilt doen
?>
Ik hoop dat dit duidelijk is en werkt zoals je bedoelt
Beetje omslachtig, het kan waarschijnlijk ook wel gewoon in 1 query:
SELECT
id,
waarde,
ABS(800-waarde) AS testvalue
FROM
tabel
ORDER BY
testvalue ASC
LIMIT 1
Wat deze query doet is het berekenen van de absolute waarde van het verschil tussen de waarde in de tabel en de waarde die de gebruiker invoert. Vervolgens oplopend sorteren op die waarde. Met de LIMIT zorg je dat er maar 1 waarde weergegeven wordt.
Enige nadeel van deze query is, dat als de gebruiker een waarde invoert die precies tussen twee andere waarden ligt, er maar 1 waarde weergegeven wordt. Dat zal dan de waarde met het laagste id zijn.