有这样一个sql语句。是用来查询附近的人的。要知道有多少人使用。使用model的count方法。
下面是这个sql语句:
select userid ,username,homeland,headimage,(acos(sin(('.$lat.' * 3.1415) / 180 ) *sin((latitude * 3.1415) / 180 ) +cos(('.$lat.' * 3.1415) / 180 ) * cos((latitude * 3.1415) / 180 ) *cos(('.$lon.' * 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6378.137) as distance from user,refresh order by distance where geohash=:geohash1 or geohash=:geohash2 or geohash=:geohash3 or geohash=:geohash4 or geohash=:geohash5 or geohash=:geohash6 or geohash=:geohash7 or geohash=:geohash8 or geohash=:geohash9 limit 0,10;
其中user表是记录了user的信息。refresh表记录了的是用户随时经度和维度的变化。
$criteria = new cdbcriteria; $criteria->addcondition('where geohash=:geohash1 or geohash=:geohash2 or geohash=:geohash3 or geohash=:geohash4 or geohash=:geohash5 or geohash=:geohash6 or geohash=:geohash7 or geohash=:geohash8 or geohash=:geohash9'); $criteria->params=array(':current'=>$current); $criteria->order='distance desc'; $refreshmodel=refresh::model(); $total=$planmodel->count($criteria); $pager=new cpagination($total); $pager->pagesize=10; $pager->applylimit($criteria); $planlist= $planmodel->findall($criteria);
然后使用relation规则来得到user表的信息。
请问这样做能不能达到预期的效果?
最后好像生成的数组还要变一下,然后才能返回有效的信息(json)给客户端、但是这个where条件太坑爹了。能不能稍稍优化一下。
最关键的是:
(acos(sin(('.$lat.' * 3.1415) / 180 ) *sin((latitude * 3.1415) / 180 ) +cos(('.$lat.' * 3.1415) / 180 ) * cos((latitude * 3.1415) / 180 ) *cos(('.$lon.' * 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6378.137) as distance
这句话我该放在哪里?是放在select属性里面吗?
回复内容: 有这样一个sql语句。是用来查询附近的人的。要知道有多少人使用。使用model的count方法。
下面是这个sql语句:
select userid ,username,homeland,headimage,(acos(sin(('.$lat.' * 3.1415) / 180 ) *sin((latitude * 3.1415) / 180 ) +cos(('.$lat.' * 3.1415) / 180 ) * cos((latitude * 3.1415) / 180 ) *cos(('.$lon.' * 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6378.137) as distance from user,refresh order by distance where geohash=:geohash1 or geohash=:geohash2 or geohash=:geohash3 or geohash=:geohash4 or geohash=:geohash5 or geohash=:geohash6 or geohash=:geohash7 or geohash=:geohash8 or geohash=:geohash9 limit 0,10;
其中user表是记录了user的信息。refresh表记录了的是用户随时经度和维度的变化。
$criteria = new cdbcriteria; $criteria->addcondition('where geohash=:geohash1 or geohash=:geohash2 or geohash=:geohash3 or geohash=:geohash4 or geohash=:geohash5 or geohash=:geohash6 or geohash=:geohash7 or geohash=:geohash8 or geohash=:geohash9'); $criteria->params=array(':current'=>$current); $criteria->order='distance desc'; $refreshmodel=refresh::model(); $total=$planmodel->count($criteria); $pager=new cpagination($total); $pager->pagesize=10; $pager->applylimit($criteria); $planlist= $planmodel->findall($criteria);
然后使用relation规则来得到user表的信息。
请问这样做能不能达到预期的效果?
最后好像生成的数组还要变一下,然后才能返回有效的信息(json)给客户端、但是这个where条件太坑爹了。能不能稍稍优化一下。
最关键的是:
(acos(sin(('.$lat.' * 3.1415) / 180 ) *sin((latitude * 3.1415) / 180 ) +cos(('.$lat.' * 3.1415) / 180 ) * cos((latitude * 3.1415) / 180 ) *cos(('.$lon.' * 3.1415) / 180 - (longitude * 3.1415) / 180 ) ) * 6378.137) as distance
这句话我该放在哪里?是放在select属性里面吗?