0

我正在尝试进行查询,该查询为我提供了按距当前位置多远排序的商店列表。我正在使用 php 并将 MySQL 用于我的数据库。

为了计算 2 家商店之间的距离,我使用 2 家商店的经度和纬度并从中得出距离。这包含在自定义函数distance($lat1, $lng1, $lat2, $lng2)中。该函数的结果是 中的距离km

我想使用这个函数在我的查询结果中创建一个额外的列,这样我就可以对所有商店从我当前位置最后面的一个到离我当前位置最远的一个进行排序。这两个函数都在同一个文件中声明,但我没有得到任何结果。是否可以通过像我一样声明它来调用 SELECT 子句中的函数?

function getSortedStores($cur_lat, $cur_lng)
{
    $query = "SELECT Store.ID, Store.Name, distance($cur_lat, $cur_lng, Address.Latitude, Address.Longitude) AS Distance FROM Store INNER JOIN Address ON Store.ID=Address.StoreID ORDER BY Distance";
    $result = mysql_query($query);
    return $result;
}

function distance($lat1, $lng1, $lat2, $lng2)
{
    $toRadians = M_PI / 180;
    $lat1 *= $toRadians;
    $lng1 *= $toRadians;
    $lat2 *= $toRadians;
    $lng2 *= $toRadians;

    $r = 6371; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;
    $dlng = $lng2 - $lng1;
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;
    $km = round($km, 1);

    return $km;
}
4

2 回答 2

0

你不能在mysql中使用php函数。有关 mysql 用户定义函数的更多详细信息

看到这个

http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html

于 2013-04-12T17:03:59.857 回答
0

您不能以这种方式混合 PHP 和 mySQL,您可以在 mySQL 中使用它们的数学函数进行计算,或者选择原始数据并根据 PHP 中的结果集进行计算。但是您不能mySQL 查询中调用 PHP 函数。

或者,假设您的商店不是移动的。您可以创建一个简单的表格来存储所有商店之间的距离。它占用了一些额外的存储空间,但最终可能会为您节省相当多的 CPU 周期。

TABLE distances
  store1_id INT PK
  store2_id INT PK
  distance FLOAT

SELECT distance
FROM distances
WHERE (store1_id = $store1 AND store2_id = $store2)
  OR (store1_id = $store2 AND store1_id = $store2)
LIMIT 1
于 2013-04-12T17:15:45.850 回答