использование значения столбца в расчете в запросе MySQL

0

У меня есть этот код, который должен (надеюсь) получить самые близкие результаты в данном месте:

$sql = "SELECT *,
    lat as LAT,
    long as LONG
FROM mellow_listings
ORDER BY SQRT(((".$long."-LONG)*(".$long."-LONG))
    +((".$lat."-LAT)*(".$lat."-LAT))) ASC
LIMIT 0,10";

по какой-то причине он вообще не работает. Я думаю, это потому, что я неправильно использую имена столбцов в вычислении...

Любые идеи?

Спасибо

Теги:

2 ответа

2
Лучший ответ

Бьюсь об заклад, вы евро, вы находитесь в Северной Америке, где долготы полушария отрицательны.

Попробуйте придерживаться своих значений для lat и long в круглых скобках.

Кроме того, SQRT не дает вам ничего, кроме дополнительных вычислений здесь. Вы можете заказать по квадрату значение так же легко, с тем же результатом.

ORDER BY ((((".$long.")-LONG) * ((".$long.")-LONG))+
          (((".$lat. ")-LAT ) * ((".$lat. ")-LAT )))

Этот типизированный образец работал из моего локального файла zipcode в США очень красиво.

SELECT * 
FROM ZIP 
ORDER BY ((latitude-(42.811261)) * (latitude-(42.811261)))+
         ((longitude-(-70.877264))*(longitude-(-70.877264)))

Кроме того, ваши местоположения лучше не находиться рядом с полюсом или более чем на 15 мегаметров друг от друга, или это прямоугольное приближение, которое вы используете, будет разваливаться довольно эффектно. Если они находятся далеко друг от друга, вам понадобится использовать формулу вычисления расстояния по большому кругу.

  • 0
    Я в англии : p но я предполагаю, что то же самое правильно. Тем не менее, я использовал latlong (0,0) для тестирования, поэтому не должно было быть проблем. Я вижу вашу точку зрения с полюсами, хотя это также не должно быть проблемой, учитывая, что результаты будут все в Великобритании и искривление Земли (я полагаю, это то, о чем вы говорите) не придет в слишком большое влияние между точками. Тем не менее, я постараюсь получить лучшую функцию - возможно, сделать это на стороне сценария. Вы можете отправить евро на мой домашний адрес. :)
0

Кажется, что mysql путается с помощью long AS LONG... Мне интересно, может быть, mysql считает, что он должен быть частью инструкции Dim в хранимой процедуре или что-то в этом роде. В любом случае mysql не разрешил бы мне псевдоним столбца как LONG... Я попытался изменить его на LONGX, и он сработал.

btw, я использую mysql 5.1.4 - не уверен, что это чувствительно к версии

Ещё вопросы

Сообщество Overcoder
Наверх
Меню