我正在尝试检索用户当前纬度/经度位置附近的商家信息。
尝试使用MySQL的地理空间POINT无济于事,因此返回使用每条记录的DECIMAL lat / lon值。
以下功能是为了获取10公里内的列表(基于this formula)我发现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"];
}
}
答案 0 :(得分:1)
您可以尝试查看MySQL great circle distance。你也可以看看@ Google maps SQL api。它显示了如何在另一个位置附近找到位置。
现在专门查看您的代码,您会遇到一些错误。
声明后没有分号:
$ current_lon = 175.505 $ result = mysql_query(“
没有字符串的连接(您对字符串使用双引号,但也在其中使用双引号)。
功能结束后没有}
。
以下是您的代码的快速清理:
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;
}