Использование MySQL SELECT AS для текущей Широты / Долготы - PullRequest
1 голос
/ 10 апреля 2011

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

Попробовал геопространственную ТОЧКУ MySQL безрезультатно, поэтому вернемся к использованию значений DECIMAL lat / lon для каждой записи.

Следующая функция предназначена для получения списков в пределах 10 км (на основе эта формула ) Я понимаю, что SELECT не совсем правильно, но я не уверен, как определить ((ACOS ... 1.1515) как расстояние, а затем также выбрать другие столбцы.

// functions.php
function getDeals($type_of_deal) {
    $current_lat = -37.905;
    $current_lon = 175.505
    $result = mysql_query("
    SELECT i, company, 
        TIME_FORMAT(valid_time_start, '%l:%i %p'), 
        TIME_FORMAT(valid_time_end, '%l:%i %p'), 
        DATE_FORMAT(valid_expiry, '%D %b %y'),
        ((ACOS(SIN("$current_lat" * PI() / 180) * SIN(`company_lat` * PI() / 180) + 
        COS("$current_lat" * PI() / 180) * COS(`company_lat` * PI() / 180) * 
        COS(("$current_lon" – `company_lon`) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
    AS distance
    FROM listings
    WHERE deal_type = '" .$type_of_deal. "'
    HAVING distance<=’10′ 
    ORDER BY `distance` ASC
    ");
return $result;

// location.php
$type_of_deal = food;
$result = getDeals($type_of_deal);
    if (mysql_num_rows($result)) {
        while($row = mysql_fetch_array($result)) {
            echo $row["deal_title"];
            }
     }

1 Ответ

1 голос
/ 10 апреля 2011

Вы можете попробовать просмотреть MySQL большое расстояние круга . И вы также можете посмотреть @ Google maps SQL API . Он показывает, как найти местоположение рядом с другим местоположением.

Теперь, глядя конкретно на ваш код, у вас есть пара ошибок.

  1. Нет точки с запятой после операторов:

    $ current_lon = 175.505 $ result = mysql_query ("

  2. Нет конкатенации строк (вы используете двойные кавычки для строк, но также и внутри них).

  3. Нет } после завершения функции.

Вот быстрая очистка вашего кода:

function getDeals($type_of_deal) {
    $current_lat = -37.905;
    $current_lon = 175.505
    $result = mysql_query('SELECT i, company, 
        TIME_FORMAT(valid_time_start, "%l:%i %p"), 
        TIME_FORMAT(valid_time_end, "%l:%i %p"), 
        DATE_FORMAT(valid_expiry, "%D %b %y"),
        ((ACOS(SIN('.$current_lat.' * PI() / 180) * SIN(`company_lat` * PI() / 180) + 
        COS('.$current_lat.' * PI() / 180) * COS(`company_lat` * PI() / 180) * 
        COS(('.$current_lon.' – `company_lon`) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
    AS distance
    FROM listings
    WHERE deal_type = "'.$type_of_deal.'"
    HAVING distance<=10 
    ORDER BY `distance` ASC');
    return $result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...