2011-02-09 6 views
5

Buduję stronę internetową, na której ludzie mogą uzyskać informacje na temat ich wagi i wzrostu. W jaki sposób utworzyć strukturę zapytania, które dałoby mi wiersz z dwiema wartościami najbliższymi tym, które wprowadzili użytkownicy?SQL - znajdź wiersz z wartościami dwóch kolumn najbliżej X i Y

Znalazłem this na stackoverflow i było bardzo pomocne. Próbuję wykonać coś podobnego do tego tylko z 2 wartościami wstawionymi 1.

+0

Jeśli wiersz X ma wartości 1 cm wyższy i 1 kg cięższy niż podane wartości to "bliżej" lub dalej niż w innym rzędzie o wartościach 0,75 cm krótszych i 1,25 kg lżejszych? –

Odpowiedz

3

Jeśli waga i wysokość są równie ważne, można użyć tego (liniowy)

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

lepszym rozwiązaniem mogłoby być ważą różnic w skali, takie jak dokonanie 0,01 M (1cm) o wysokości equal ważność jak 1 kg. Kwadratowo obie strony, tak aby odchylenie 5 cm i 5 kg było postrzegane jako "bliższe" niż 10 cm i 0 kg.

(Zakładając, że wszystkie wejścia są w kilogramach i metrach)

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

hm ... nie wiedziałem, że mogę to zrobić ... :) dziękuję, proszę pana! twoje wejście zostanie oznaczone jako anwser w mniej niż 7 minut :) – Andrej

1

Zamiast próbować zrobić kilka sprytnych sztuczek SQL, aby się do tego dostosować, nie ograniczaj danych wprowadzanych przez użytkownika (za pomocą rozwijanych list, zaokrąglania do najbliższej wartości itp.), aby dopasować wartości dostępne w zestawie danych.

+0

tak, to też był mój pomysł, ale klient chciał tego konkretnego ... – Andrej

0

Co o uśrednionej różnicy tych dwóch? Polecam dając różnica w wysokości wyższej wadze od 6" z różnicą jest znacznie bardziej drastyczne niż 6 funtów różnicy. Przykład:

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

to tylko ja biorąc huśtawka na starając się różnicę w wysokości co ważniejsze, w tym przykładzie nadaję mu wagę 3. Ten przykład zakłada, że ​​wysokość osoby jest w calach ... Jeśli masz ją w centymetrach lub coś, co może działać lepiej

+0

dzięki za wejście, ale cyberkiwi anwsered wcześniej – Andrej

Powiązane problemy