поиск ближайшего номера в приложении rails - PullRequest
4 голосов
/ 02 января 2011

Дайте два параметра, которые соответствуют двум атрибутам объекта, как можно найти 20 записей в базе данных, которые являются ближайшими к этим двум числам.

У вас есть параметры x и y. Объект также имеет эти атрибуты. Например. x = 1 и y = 9999. Вам нужно найти запись, ближайшую к x и y.

Ответы [ 2 ]

4 голосов
/ 02 января 2011

Это зависит от того, как вы определяете расстояние между двумя точками.Если вы используете двумерную декартову систему координат, этот оператор SQL будет работать:

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

, где X, Y - входные данные.

1 голос
/ 02 января 2011

Похоже, вы используете геолокационные данные. Если вашей базой данных является Postgres, проверьте, можете ли вы установить или установить расширения PostGIS. Это дает вам очень быстрые инструменты, такие как «поиск ближайшего к этой точке», «поиск всего в этом круге», «поиск всего в этом квадрате» и т. Д.

http://postgis.refractions.net/

Вы бы сделали что-то вроде этого:

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

Тогда вы можете сделать что-то вроде этого - найти все в пределах 100 метров от точки:

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

Примеры из руководства .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...