Cyb*_*kie 4 php mysql codeigniter map
我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)
我试过
$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);
Run Code Online (Sandbox Code Playgroud)
问题(我认为)是我已经$query = $this->db->get('locations');在我的模型结束时告诉我从哪个表中获取数据。所以我收到以下错误:
发生数据库错误错误号:1064
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 5 行的“AS distance FROM user_profiles HAVING
distance<= 100 ORDER BYdistanceLIMI”附近使用的正确语法SELECT * FROM (
locations) WHEREcountry= 'US' ANDtags= 'technology' AND( 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 HAVINGdistance<= 100 ORDER BYdistance` LIMIT 20文件名:C:\wamp\www\mysite\system\database\DB_driver.php
行号:330
需要注意的一些事情.. 我where()在我的模型中使用了一些函数。距离查询应与其他子句共存。
您在 SQL中将distance计算设置为 a 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |