4 Stimmen

Auf der Suche nach der nächstgelegenen Zahl in einer Rails-App

Geben Sie zwei Parameter an, die zwei Attribute auf einem Objekt entsprechen. Wie kann man 20 Datensätze in einer Datenbank finden, die am nächsten an diesen beiden Zahlen liegen?

Die Parameter, die Sie haben, sind x und y. Das Objekt hat auch diese Attribute. Zum Beispiel: x = 1 und y = 9999. Sie müssen den Datensatz finden, der am nächsten zu x und y liegt.

4voto

Pan Thomakos Punkte 33342

Das hängt davon ab, wie Sie den Abstand zwischen zwei Punkten definieren. Wenn Sie ein zweidimensionales kartesisches Koordinatensystem verwenden, funktioniert dieser SQL-Befehl:

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

Wo X,Y die Eingaben sind.

1voto

stef Punkte 13943

Es scheint, als ob Sie geolokalisierte Daten verwenden. Wenn Ihr Datenbank-Backend Postgres ist, überprüfen Sie, ob Sie die PostGIS-Erweiterungen haben oder installieren können. Dies bietet Ihnen sehr schnelle Tools, mit denen Sie nach 'Suche nach dem nächsten Element zu diesem Punkt', 'Suche nach allem innerhalb dieses Kreises', 'Suche nach allem innerhalb dieses Quadrats' usw. suchen können.

http://postgis.refractions.net/

Sie würden etwas Ähnliches wie dies tun:

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

Dann können Sie etwas Ähnliches tun - finden Sie alles innerhalb von 100 Metern von einem Punkt:

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

Beispiele aus der Anleitung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X