MySQL: гарантия результатов, десятичный выпуск - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть таблица со следующими атрибутами:

MyTable:
- double longitude 
- double latitude
- varchar place_id
- varcar geoJSON_string

Учитывая некоторую точку, имеющую долготу x и широту y Мне нужно выбрать k ближайшие точки.

Я знаю, что ставлю LIMIT k в конце запроса, но есть ли способ, которым я могу гарантировать по крайней мере k баллов из базы данных ~250,000 записей?

Кроме того, как быЯ даже запросить десятичные значения?Мне нужно выбрать что-то похожее на следующее:

SELECT * FROM MyTable WHERE latitude=140.3**** and longitude=132.2**** LIMIT k;

1 Ответ

2 голосов
/ 13 ноября 2011
SELECT * FROM MyTable WHERE latitude BETWEEN '140.3' AND '140.4' AND longitude BETWEEN '132.2' AND '132.3' LIMIT k;

или, если вам нужен лучший результат:

SELECT * FROM MyTable ORDER BY ABS(ABS(searched-lon - longitude) - ABS(searched-lat - latitude)) ASC LIMIT k;
...