2012-05-17 3 views
0

У меня есть запрос MySQL, содержащий список ресторанов, гостиниц и т. Д. Каждая строка имеет данные о широте и долготе.Порядок MySQL по возвращению функции PHP

Мне нужно отсортировать результаты по расстоянию относительно искомого местоположения пользователя (у меня есть эта широта и долгота, как только страница загружается).

У меня также есть функция PHP, которая возвращает расстояние в километрах от двух LAT/LNG пара:

distance($lat1,$lng1,$lat2,$lng2); 

Но как сделать заказ результатов запроса от этого расстояния?

Допустим, запрос, на данный момент, просто

mysql_query("select * from merchants"); 

Вставлять order by distance(latitude,longitude,'$center_lat','$center_long') там дает ошибку говоря FUNCTION dbname.distance does not exist. Я думал о создании временных таблиц MySQL с расстояниями, как только страница загружается, а затем сортировка по этому вопросу, но это похоже на излишний. Это?

ответ

2

Не могли бы вы создать функцию MySQL, которая выполняет ту же функцию, что и ваша функция PHP? Это был бы самый простой, эффективный и в целом лучший способ, если вы в состоянии это сделать. Если вы опубликуете исходный код своей функции distance(), я взгляну на его преобразование в MySQL.

В противном случае, вам придется выполнить сортировку в PHP, который является относительно простым при использовании array_multisort() (смотрите на Пример # 3 Сортировка базы данных результатов):

<?php 

    // Connect to database, yada yada yada 

    // Do the query 
    $query = " 
    SELECT * 
    FROM merchants 
    "; 
    $result = mysql_query($query); 

    // Fetch the results into a 2 dimensional array. 
    // Also create an array with the results of the distance function 
    $rows = $sortcol = array(); 
    while ($row = mysql_fetch_assoc($result)) { 
    $sortcol[] = $row['distance'] = distance($row['latitude'], $row['longitude'], $center_lat, $center_long); 
    $rows[] = $row; 
    } 

    // Sort the results 
    array_multisort($sortcol, SORT_ASC, $rows); 

    // Rows should now be sorted 
    print_r($rows); 
+0

Я воспользуюсь решением PHP, спасибо. – jovan

0

Как, по вашему мнению, ваш серверный процесс MySql вызывает ваш PHP-процесс для выполнения функции?

Эта привычная работа - SQL Не работал так, как последние 50 лет.

Вы отправляете строку на SQL-сервер, она должна быть оценена ТАМ, а не на вашем хосте. Очевидно, ваш MySql не знает эту функцию.

+0

Да, я понимаю, что сейчас , Но какое решение? – jovan

+1

@robert Портируйте алгоритм сортировки в MySQL. Формула большого круга для SQL - это хорошо освещенная тема. – deceze