我正在尝试使用ActiveRecord
在CI中创建以下查询SELECT *,
( 3959 * acos( cos( radians($lat) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians($lng) )
+ sin( radians($lat) )
* sin( radians( lat ) ) ) ) AS distance
FROM locations
HAVING distance <= $miles
ORDER BY distance
LIMIT 0, 20
我试过
$where = "( 3959 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) AS distance FROM locations";
$this->db->where($where);
$this->db->having('distance <= ' . $miles);
$this->db->order_by('distance');
$this->db->limit(20, 0);
问题(我认为)是我已经告诉我在哪个表格中通过$query = $this->db->get('locations');
在模型结尾处获取数据。所以我收到以下错误:
发生数据库错误错误 编号:1064
您的SQL语法有错误; 检查对应的手册 您的MySQL服务器版本 正确的语法在'AS距离附近使用 FROM user_profiles HAVING
distance
&lt; = 100 ORDER BYdistance
LIMI'at 第5行SELECT * FROM(
locations
)WHEREcountry
='美国'和tags
='技术'和( 3959 * acos( cos( radians(25.9331488) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-80.1625463) ) + sin( radians(25.9331488) ) * sin( radians( lat ) ) ) ) AS distance FROM locations HAVING
距离<= 100 ORDER BY
距离'限制20文件名: C:\瓦帕\ WWW \ mysite的\ SYSTEM \数据库\ DB_driver.php
行号:330
有些事情要注意..我在我的模型中使用了一些where()
函数。距离查询应与其他子句共存。
答案 0 :(得分:4)
您在SQL中将distance
计算设置为WHERE
。你想要它在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);
答案 1 :(得分:-1)
$ miles = 20;
$ this-&gt; db-&gt; select(“*,(3959 * acos(cos(弧度($ shop_lat))* cos(弧度(纬度))* cos(弧度(lng) - 弧度($ shop_long))+ sin(弧度($ shop_lat))* sin(弧度(纬度))))AS距离“);
$这 - &GT; DB-肽从( '店');
$ this-&gt; db-&gt; having('distance&lt; ='。$ miles);
$这 - &GT; DB-&GT; ORDER_BY( '距离');
$ this-&gt; db-&gt; limit(20,0);
$ query = $ this-&gt; db-&gt; get();
$ result = $ query-&gt; result();
返回$ result;
}