Php 在sql中使用lat和long查找距离

Php 在sql中使用lat和long查找距离,php,mysql,codeigniter,Php,Mysql,Codeigniter,我想用lat和long搜索10 k.m.内的任何地方。我如何设置限制?以下是我的sql查询: $this->db->select(", ( 6371 acos( cos( radians(37) ) cos( radians(latitude) ) cos( radians( longtitude )- radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude) ) ) ) AS distance");

我想用lat和long搜索10 k.m.内的任何地方。我如何设置限制?以下是我的sql查询:

$this->db->select(", ( 6371  acos( cos( radians(37) )  cos( radians(latitude) )   cos( radians( longtitude )- radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude) ) ) ) AS distance");                         
$this->db->from('table_name'); 
$this->db->order_by('distance');
试试这个:
$this->db->选择(,(6371 acos(cos(弧度(37))cos(弧度(纬度))cos(弧度(经度)-弧度($lng))+sin(弧度($lat))*sin(弧度(纬度))作为距离);
$this->db->from('table_name');
$this->db->having('distance试试这个:

    $this->db->query('  SELECT  ( 6371 * acos( cos( radians(37) )  cos( radians(latitude) )   cos( radians( longtitude )- radians("'.$lng.'") ) + sin( radians("'.$lat.'") ) * sin( radians( latitude) ) ) ) AS distance 
                        FROM table_name
                        HAVING distance < 10
                        ORDER BY distance ASC');
$this->db->query('SELECT(6371*acos(cos(radians(37))cos(radians(latitude))cos(radians(longtude)-radians('$lng')))+sin(radians('$lat'))*sin(radians(latitude)))作为距离
从表\u名称
距离小于10的
按距离排序(ASC');

您有任何错误吗?$this->db->having('distance<10');假设您的select语句是正确的,并且在我的公式<10的地方给出了以公里为单位的距离。您可以使用一个边界矩形(嗯,一个正方形)要快速筛选结果,请参阅准备好的语句,直到我没有得到kms中的结果。你说的没有kms是什么意思?你得到了任何结果或错误吗?我得到了结果,但得到了错误的结果,实际上,通过上面的查询,我得到了一些带有距离字段的记录,而在距离字段中,我得到了类似“2181”的值。以及您的查询获取此字段的结果。表示如果我使用“距离”,您是否使用纬度值或默认纬度值更改了值37?
    $this->db->query('  SELECT  ( 6371 * acos( cos( radians(37) )  cos( radians(latitude) )   cos( radians( longtitude )- radians("'.$lng.'") ) + sin( radians("'.$lat.'") ) * sin( radians( latitude) ) ) ) AS distance 
                        FROM table_name
                        HAVING distance < 10
                        ORDER BY distance ASC');
$sql = 'select *,(((acos(sin(('.$lat.'*pi()/180)) * 
            sin((loc_LAT_centroid*pi()/180))+cos(('.$lat.'*pi()/180)) * 
            cos((loc_LAT_centroid*pi()/180)) * cos((('.$lang.'-loc_LONG_centroid)* 
            pi()/180))))*180/pi())*60*1.1515
        ) AS distance from table_name order by distance';

$lat = latitude of your current location
$lang = longitude of your current location

loc_LAT_centroid = field name of your table where you store the latitude of the places.
loc_LONG_centroid = field name of your table where you store the longitude of the places.