查询数据库时使用PHP函数

时间:2013-07-31 13:04:03

标签: php mysql sql

我正在用PHP做一个项目。我有一个包含LATLONG字段的餐馆表。我想从cuisine_id获得 10 餐厅(具有特定USER),其距离小于 5km 。 我使用以下函数来计算距离:

// Function for Getting distance between two coordinates.
function getDistance( $latitude1, $longitude1, $latitude2, $longitude2 ) {   
    $earth_radius = 6371;
    $dLat = deg2rad( $latitude2 - $latitude1 );  
    $dLon = deg2rad( $longitude2 - $longitude1 );  

    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * sin($dLon/2) * sin($dLon/2);  
    $c = 2 * asin(sqrt($a));  
    $d = $earth_radius * $c;  
    return $d;  
} 

从数据库中选择记录时是否可以使用该功能?

有人可以告诉我一个示例查询获取(使用LIMIT值)餐馆距离 5km 或更少(用户LAT和{{可以一次性使用1}}(如果可能的话,使用上面提到的LONG函数)。

3 个答案:

答案 0 :(得分:1)

一个sql server查询和php函数执行是两个不同的东西,它们不能混合。 您要么必须在单独的步骤中执行该任务(因此首先计算,然后查询),或者您必须在sql server中实现您的函数,而不是在php中。这是可能的,它被称为Stored procedure

答案 1 :(得分:1)

这个问题与mysql-great-circle-distance-haversine-formula

有点类似
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance 
FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

答案 2 :(得分:1)

看看这个question。我想如果你用mysql编写你的函数,那么使用查询就更容易了。我试图编写你的函数版本..(语法可能不完美)

DELIMITER $$

CREATE FUNCTION distance(LAT1 DOUBLE(10,6), LON1 DOUBLE(10,6), LAT2 DOUBLE(10,6), LON2 DOUBLE(10,6))
RETURNS DOUBLE(10,2)
DETERMINISTIC
BEGIN
DECLARE r, dLat, dLon, a, c, d DOUBLE(10,6);
SET r=6371.0;
SET LAT1 = RADIANS(LAT1);
SET LON1 = RADIANS(LON1);
SET LAT2 = RADIANS(LAT2);
SET LON2 = RADIANS(LON2);
SET dLat = LAT2-LAT1;
SET dLon = LON2-LON1;
SET a = SIN(dLat/2.0) * SIN(dLat/2.0) + COS(LAT1) * COS(LAT2) * SIN(dLon/2.0) * SIN(dLon/2.0);
SET c = 2 * ASIN(SQRT(a));
SET d = c * r;
RETURN d;
END
$$

DELIMITER ;

然后,你可以这样做......

$userLatitude = ...
$userLongitude = ...
$cuisine = ...

SELECT cuisine_id, distance(LAT,LONG,$userLatitude,$userLongitude) as Distance FROM Restaurants WHERE cuisine_id = $cuisine HAVING Distance < 5 ORDER BY Distance LIMIT 10;