php - 使用php mysql按半径搜索经纬度数据库

标签 php sql json jquery

我正在尝试开发一个小型站点,该站点按设定的半径从数据库中检索结果并将其放置在 map 上。 我使用 Google map API 从那里获取经纬度搜索条件,将这些传递到我的 php 脚本,该脚本查询数据库并将结果集作为 JSON 对象返回。

我在使用 json 将纬度和经度发送到 php 时遇到了一个小问题。

我的主要问题是我搜索数据库的 sql 似乎是错误的,因为它只检索了我数据库中的前 10 个结果。我希望它返回搜索点半径范围内的前 10 个结果。

这是我的ajax代码

function showCarPark(location)
{
    var lat = location.lat();
    var lng = location.lng();
    //alert("Lat: " +lat.toFixed(6));
    //alert("Lng: " +lng.toFixed(6));
    document.getElementById('carParkResults').innerHTML = "";
    var criterion = document.getElementById("address").value;
    var count = 0;
    $.ajax({    
              url: 'process.php',
              type: 'GET',
              data: "lat=" + lat + "&lng=" + lng,
              dataType: 'json',
              success: function(data) 
              {
                  jQuery.each(data, function()
                  {
                    $('<p>').text("Car Park: " + data[count].name).appendTo('#carParkResults');
                    placeCarParks(data[count].postcode,data[count].name, data[count].street, data[count].type);
                    count++;
                  });
              },
              error: function(e) 
              {
                //called when there is an error
                console.log(e.message);
                alert("error" + e.message);
              }
    });

这是我的 php 脚本

$rad = 20;
$lat = $_GET['lat'];
$lng = 1.4681464; //put a temporary number in as it wont pass the lng in the JSON

$sql="SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(long) - radians('".$lng."')) + sin(radians('".$lat."')) * 
sin(radians(lat)))) 
AS distance 
FROM carpark HAVING distance < 15 ORDER BY distance LIMIT 0 , 10";

$result = mysql_query($sql);

while($r = mysql_fetch_assoc($result)) $rows[] = $r;

echo json_encode($rows);

我表中的列称为纬度和经度 感谢您的帮助。

最佳答案

对于您的情况,请尝试使用 WHERE 而不是 HAVING

SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(long) - radians('".$lng."')) + sin(radians('".$lat."')) * 
sin(radians(lat)))) 
AS distance 
FROM carpark WHERE distance < 15 ORDER BY distance LIMIT 0 , 10

关于php - 使用php mysql按半径搜索经纬度数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10621345/

相关文章:

sql - sql中firebase的集合和文档的等价物是什么?

c# - 无法使用 Newtonsoft 反序列化 json

java - 我应该如何在 JSON 中转义字符串?

php - php函数中的参数错误

php - 从表中选择所有 ORDER BY 另一个表列,匹配主键

php - Laravel 5.3 密码代理自定义

java - Hibernate 问题,一个以对象为键、以整数为值的映射

php: 使用 cURL 获取 url 内容 (json)

PHP 到 mySQL 检查用户是否存在

php - 如何从字符串中删除完全匹配?