LINUX.ORG.RU

оч. просто:

SELECT *,SQRT(POW('$x_point'-`x_from`,2)+POW('$y_point'-`y_from`,2)) AS distance FROM `orders` WHERE `active`='1' ORDER BY distance,`id` ASC LIMIT 10

Только недавно решал такую задачу. Можно даже еще и расстояние в метрах считать, но там формула сложнее.

drakmail ★★★★
()
Ответ на: комментарий от drakmail

> Только недавно решал такую задачу. Можно даже еще и расстояние в метрах считать, но там формула сложнее.

Для малых расстояний WGS84 будет скорее вреден, чем полезен. Для всяких локальных колдобин и бугров, если считается расстояние «вдоль дороги», погрешность будет и так и так большая, а вычислений будет больше на порядок.

shimon ★★★★★
()
Ответ на: комментарий от mashina

c mysql вам не по пути с такими задачами

Привет, аналитик и телепат.

SteveBallmer
()
Ответ на: комментарий от mashina

SELECT *, ( 6371000 * acos( cos( radians(".$point['y'].") ) * cos( radians( y ) ) * cos( radians( x ) - radians(".$point['x'].") ) + sin( radians(".$point['y'].") ) * sin( radians( y ) ) ) ) AS distance FROM cms_places HAVING distance < 250 AND id <> {$id} AND title <> \«\» AND title <> \«NULL\» ORDER BY distance LIMIT 0 , 10

chapay ★★★
() автор топика

А еще можно дублировать эти данные в MongoDB - она умеет изкаробке такую функциональность.

theos ★★★
()
Ответ на: комментарий от chapay

Ты можешь гарантировать только:

менее чем за секунду расчиталась


Это по-твоему вполне быстро?

anonymous
()
Ответ на: комментарий от chapay

достаточно чтобы страничка менее чем за секунду расчиталась

оптимист.

mashina ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.