2011-02-09 19 views
5

Sto costruendo un sito web sulle persone wich può ottenere qualche informazione in base al loro peso e altezza. In che modo strutturare una query mi darebbe una riga con i due valori specifici più vicini a quelli che gli utenti inseriscono?SQL - trovare la riga con i valori di due colonne più vicini alla X e Y

ho trovato this su StackOverflow ed è stato molto utile. Sto cercando di realizzare qualcosa di simile a quello solo con 2 valori insted di 1.

+0

Se fila X ha valori 1 cm più alto e 1 kg più pesante rispetto ai valori inseriti è che "più vicino" o più lontano di un'altra riga con i valori di 0,75 cm più brevi e 1,25 kg più leggeri? –

risposta

3

Se il peso e l'altezza sono di pari importanza, è possibile utilizzare questo (lineare)

select top 1 * 
from tbl 
order by ABS([email protected]) + ABS([email protected]) 

Una soluzione migliore potrebbe essere quella di pesare le differenze, su scala, come la realizzazione di 0.01m (1cm) di altezza equal importanza come 1kg. Quadrare entrambi i lati, in modo che una deviazione di 5 cm e 5 kg sia vista come "più vicina" a 10 cm e 0 kg.

(assumendo tutti gli ingressi sono in kg e metri)

select top 1 * 
from tbl 
order by ABS([email protected])^2 + (ABS([email protected])*100)^2 
+0

hm .. non sapevo di poterlo fare ... :) grazie signore! il tuo input sarà contrassegnato come anwser in meno di 7 minuti :) – Andrej

1

Piuttosto che provare a fare alcuni trucchi SQL intelligenti per soddisfare questo, perché non limitare l'input dell'utente (utilizzando gli elenchi a discesa, arrotondando al valore più vicino , ecc.) per abbinare i valori disponibili nel set di dati.

+0

sì, quella era la mia idea anche, ma il cliente ha voluto questo specifico ... – Andrej

0

Che dire la differenza media tra i due? Suggerirei dando la differenza di altezza un peso più elevato dal 6" di differenza è molto più drastica di 6 libbre di differenza. Esempio:

SELECT * FROM table 
ORDER BY ABS(weight - @weight) + ABS(height - @height)*3 

questo è solo a me prendere un'altalena a cercare di fare la differenza in altezza più importante. in questo esempio sto dando un peso di 3. questo esempio presuppone l'altezza di una persona è in pollici ... Se lo avete in centimetri o qualcosa che potrebbe funzionare meglio.

+0

grazie per l'input ma cyberkiwi ha anticipato prima – Andrej