2011-01-02 8 views
4

オブジェクトの2つの属性に対応する2つのパラメータを指定すると、それらの2つの数値に最も近い20のレコードをデータベースで見つけることができます。レールアプリケーションで最も近い番号を検索

パラメータはx、yです。オブジェクトにはこれらの属性もあります。例えば。 x = 1、y = 9999です。xとyに最も近いレコードを見つける必要があります。

答えて

4

2点間の距離の定義方法によって異なります。 2次元デカルト座標系を使用している場合、このSQLステートメントは動作します。

 
SELECT id, x, y FROM points ORDER BY SQRT(POWER((X-x),2)+POWER((Y-y),2)) ASC LIMIT 20; 

ここで、X、Yは入力です。

+0

+1これはまさに私が投稿しようとしていたものです。私はそれがデカルト座標系であると仮定していましたが、質問するのは良い質問です。 – jdl

+0

yupのデータはx、yから来ています。デカルト: – s84

+0

これをどのようにしてレール選択文にすることができますか? – s84

1

ジオロケーションデータを使用しているようです。データベースのバックエンドがPostgresの場合は、PostGIS拡張機能があるかどうかを確認してください。これにより、「この点に最も近いものを検索する」、「このサークル内のすべてを検索する」、「この四角形内のすべてを検索する」などの検索を行う非常に高速なツールが提供されます。

http://postgis.refractions.net/

あなたはこのようなものだろう:

CREATE INDEX [indexname] ON [tablename] USING GIST ([geometrycolumn] gist_geometry_ops); 

は、その後、あなたがこのような何かを行うことができます - ポイントの100メートル以内にすべてを見つける:the manualから

SELECT * FROM GEOTABLE WHERE 
GEOM && GeometryFromText(’BOX3D(900 900,1100 1100)’,-1) AND 
Distance(GeometryFromText(’POINT(1000 1000)’,-1),GEOM) < 100; 

例。

関連する問題