sql: welke waarde is het kortste bij

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels Beckers

Niels Beckers

14/04/2007 10:50:00
Quote Anchor link
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
 
PHP hulp

PHP hulp

01/10/2022 20:01:37
 
TJVB tvb

TJVB tvb

14/04/2007 11:21:00
Quote Anchor link
Ik denk dat het makkelijkste is om de eerste rij te selecteren die eronder ligt en de eerste die erboven ligt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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

Quote:
Edit typo's
Gewijzigd op 01/01/1970 01:00:00 door TJVB tvb
 
Joren de Wit

Joren de Wit

14/04/2007 12:46:00
Quote Anchor link
Beetje omslachtig, het kan waarschijnlijk ook wel gewoon in 1 query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
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.
 
Niels Beckers

Niels Beckers

15/04/2007 08:04:00
Quote Anchor link
Bedankt Blanche
Het is gelukt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.