|
|
|
| Может кто нибудь знает как составить sql запрос чтобы он делал выборку из базы данных, выбирал те объекты которые лежат между двумя точками на карте, можно просто по долготе, широту не брать во внимание.
Нашел формулу гаверсинус, но по ней можно сделать выборку только тех объектов которые лежат в радиусе от заданной точки:
$query = sprintf("SELECT address, name, rayon, lat, lng,
( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) )
AS distance FROM markers_ussearch HAVING distance < '%s' ORDER BY distance LIMIT 0 , 50" | |
|
|
|
|
|
|
|
для: damen
(23.01.2013 в 13:59)
| | Приведите структуру бд, поможем. | |
|
|
|
|
|
|
|
для: oradev
(23.01.2013 в 14:48)
| | а нет ни какой структуры, в базе всего лишь одна таблица "markers_ussearch" с полями `id`, `name`, `address`, `lat`, `lng` | |
|
|
|
|
|
|
|
для: student174
(23.01.2013 в 14:56)
| | а нет ни какой структуры
есть))
"markers_ussearch" с полями `id`, `name`, `address`, `lat`, `lng`
это и есть структура | |
|
|
|
|
|
|
|
для: Valick
(23.01.2013 в 15:06)
| | извиняюсь, спутал со схемой данных, плохо разбераюсь в бд | |
|
|
|
|
|
|
|
для: student174
(23.01.2013 в 15:12)
| | В запросе вы явно перемудрили самого себя, в ваше вычисляемое поле касаться не буду, запрос должен быть примерно таким:
SELECT address, name, rayon, lat, lng
FROM markers_ussearch
WHERE
( 6371 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) < %s
ORDER BY 1
LIMIT 0,50
|
| |
|
|
|