2011-02-09 10 views
5

Estoy construyendo un sitio web en el que la gente puede obtener algunas informaciones en función de su peso y altura. ¿Cómo se estructuraría una consulta que me daría una fila con los dos valores específicos más cercanos a los que ingresan los usuarios?SQL - encuentra la fila con los valores de dos columnas más cercanas a X e Y

Encontré this en stackoverflow y fue muy útil. Estoy tratando de lograr algo similar a eso solo con 2 valores en 1.

+0

Si la fila X tiene valores de 1 cm más alto y 1 kg más pesado que los valores ingresados ​​es que "más cerca" o más lejos que otra fila con valores 0.75 cm más cortos y 1.25 kg más livianos? –

Respuesta

3

Si el peso y la altura son de igual importancia, puede utilizar esta (lineal)

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

Una mejor opción podría ser que sopesar las diferencias, en una escala, tales como hacer 0,01m (1 cm) de altura de equal importancia como 1kg. Cuadre ambos lados también, de modo que una desviación de 5 cm y 5 kg se vea como "más cercana" que 10 cm y 0 kg.

(suponiendo que todas las entradas están en kg y metros)

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

hm .. no sabía que podía hacer eso ... :) ¡gracias, señor! su entrada se marcará como guión en menos de 7 minutos :) – Andrej

1

En lugar de intentar hacer algunos trucos SQL inteligentes para acomodar esto, ¿por qué no restringir la entrada del usuario? (Usando listas desplegables, redondeando al valor más cercano , etc.) para que coincida con los valores disponibles en su conjunto de datos.

+0

sí, esa también era mi idea, pero el cliente quería esta información específica ... – Andrej

0

¿Qué pasa con la diferencia promedio de los dos? Yo recomendaría que da la diferencia de altura un peso más alto desde el 6" de la diferencia es mucho más drástica de 6 libras de diferencia Ejemplo:.

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

Esto es sólo yo tomando un giro a tratar de hacer la diferencia en altura más importante. En este ejemplo le doy un peso de 3. Este ejemplo asume que la altura de una persona está en pulgadas ... Si lo tiene en centímetros o algo, podría funcionar mejor.

+0

gracias por la entrada, pero cyberkiwi anwsered antes – Andrej

Cuestiones relacionadas