Hallo,

Al sorry voor de slechte titel maar ik wist niets anders te verzinnen.
Mijn vraag gaat als volgt.

Ik heb in de database enkele rijen staan nu wil ik (adhv) een script kijken welke rij het korste bij is bij de waarde die ik heb ingevoerd.

Een voorbeeld
--database--
id - waarde
1 - 500 -
2 - 1000 -

stel ik typ in de form in 800 dan zou ik naar de rij met id 2 moeten gaan omdat dat het kortste bij ligt.

Mijn vraag is nu: Hoe selecteer ik de waarde die het kortste bij ligt?

Niels
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

Edit typo's
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.
Bedankt Blanche
Het is gelukt.

Reageren