私は人々が彼らの体重と身長に基づいていくつかの情報を得ることができるウェブサイトを構築しています。ユーザーが入力した値に最も近い2つの特定の値を持つ行を取得するクエリをどのように構成しますか?
私はこれをstackoverflowで見つけました、そしてそれは非常に役に立ちました。私は、1の代わりに2つの値を使用するだけで、それに似た何かを達成しようとしています。
体重と身長が同じくらい重要な場合は、これを使用できます(線形)
select top 1 *
from tbl
order by ABS(weight-@weight) + ABS(height-@height)
equal
重要な高さ 0.01m (1cm) を 1kg とするなど、違いを比較検討することをお勧めします。10cmと0kgよりも5cmと5kgのずれが「近い」ように見えるように、両側も直角にします。
(すべての入力が kg とメートルであると仮定)
select top 1 *
from tbl
order by ABS(weight-@weight)^2 + (ABS(height-@height)*100)^2
これに対応するためにいくつかの巧妙な SQL トリックを試みるのではなく、ユーザー入力を制限して (ドロップダウン リストを使用する、最も近い値に丸めるなど)、データセットで使用可能な値に一致させてみませんか。
両者の平均差はどうでしょうか。6 インチの差は 6 ポンドの差よりもはるかに劇的であるため、身長の差により大きな重みを与えることをお勧めします。例:
SELECT * FROM table
ORDER BY ABS(weight - @weight) + ABS(height - @height)*3
これは、身長の違いをより重要なものにしようとしている私です。この例では、重みを 3 にしています。この例では、人の身長がインチ単位であると想定しています。