【问题标题】:CodeIgniter Error 1064: Latitude and Longitude queryCodeIgniter 错误 1064:经纬度查询
【发布时间】:2015-05-27 17:09:26
【问题描述】:

我有这个在 phpMyAdmin 中工作的查询

SELECT *, 
    ( 6371 * acos ( cos ( radians(21.161908) ) 
    * cos( radians( `latitude` ) ) 
    * cos( radians( `longitude` ) - radians(-86.85152790000001) ) 
    + sin ( radians(21.161908) ) 
    * sin( radians( `latitude` ) ) ) ) AS distance 
FROM _results 
HAVING distance < 30 
ORDER BY distance 
LIMIT 0 , 20

我正在尝试在 CodeIgniter 中执行此操作:

$this->select("* , ( 6371 * acos ( cos ( radians(21.161908) ) * cos( radians(latitude) ) * cos( radians( longitude ) - radians(-86.85152790000001) ) + sin ( radians(21.161908) ) * sin( radians( latitude ) ) ) ) AS distance ");
$this->db->having('distance < 30');
$this->db->order_by('distance');
$this->db->limit(20,0);

但是有了这个我得到这个错误:

错误号:1064 您的 SQL 语法有错误... '*, (6371 * acos ( cos ( radians(21.161908) ) * cos( radians(latitude) )

有人知道这个错误吗?

注意:在此之前我实现了一个先前的查询。

【问题讨论】:

  • “在此之前我实现了一个先前的查询。” - 你能详细说明一下你的意思吗?

标签: php mysql codeigniter


【解决方案1】:

您应该使用$this-&gt;db-&gt;select() 而不是$this-&gt;select()

我有类似这样的相同类型查询

$this->db->select("*, ( 3959 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) AS distance");                         
$this->db->having('distance <= ' . $miles);                     
$this->db->order_by('distance');                    
$this->db->limit(20, 0);

工作正常。

【讨论】:

    【解决方案2】:

    你为什么不这样尝试

    $this->db->query("SELECT *, 
        ( 6371 * acos ( cos ( radians(21.161908) ) 
        * cos( radians( `latitude` ) ) 
        * cos( radians( `longitude` ) - radians(-86.85152790000001) ) 
        + sin ( radians(21.161908) ) 
        * sin( radians( `latitude` ) ) ) ) AS distance 
    FROM _results 
    HAVING distance < 30 
    ORDER BY distance 
    LIMIT 0 , 20");
    

    【讨论】:

      【解决方案3】:

      非常适合我。

      $this->db->select("SELECT *,ACOS( SIN( RADIANS( `latitude` ) ) * SIN( RADIANS( $Lat ) ) + COS( RADIANS( `latitude` ) )* COS( RADIANS( $Lat )) * COS( RADIANS( `longitude` ) - RADIANS( $Long )) ) * 6380 AS `distance`");
                  $this->db->from('_results');
                  $this->db->where("ACOS( SIN( RADIANS( `latitude` ) ) * SIN( RADIANS( $fLat ) ) + COS( RADIANS( `latitude` ) )* COS( RADIANS( $fLat )) * COS( RADIANS( `longitude` ) - RADIANS( $fLon )) ) * 6380 < 5");
                  $this->db->orderby('distance');
                  $this->db->limit(20,0);
                  return $this->db->get()->result();
      

      【讨论】:

        【解决方案4】:
         function lat_long($lat,$long){
          
         $query = $this->db->query("SELECT *, ( 6371 * acos ( cos ( radians($lat) ) * cos( radians( `latitude` ) ) * cos( radians( `longitude` ) - radians($long) ) + sin ( radians($lat) ) * sin( radians( `latitude` ) ) ) ) AS distance FROM table HAVING distance < 30 ORDER BY distance LIMIT 0 , 20");     
         return $query->result();
        
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-29
          • 2012-04-19
          • 1970-01-01
          • 1970-01-01
          • 2020-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多