Heim > Backend-Entwicklung > PHP-Tutorial > 复杂的SQL语句如何使用CDbCriteria来整合呢?

复杂的SQL语句如何使用CDbCriteria来整合呢?

WBOY
Freigeben: 2016-06-06 20:45:07
Original
1222 Leute haben es durchsucht

有这样一个SQL语句。是用来查询附近的人的。要知道有多少人使用。使用model的count方法。
下面是这个SQL语句:

<code class="lang-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;

</code>
Nach dem Login kopieren
Nach dem Login kopieren

其中User表是记录了user的信息。refresh表记录了的是用户随时经度和维度的变化。

<code class="lang-php">        $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);

</code>
Nach dem Login kopieren
Nach dem Login kopieren

然后使用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语句:

<code class="lang-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;

</code>
Nach dem Login kopieren
Nach dem Login kopieren

其中User表是记录了user的信息。refresh表记录了的是用户随时经度和维度的变化。

<code class="lang-php">        $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);

</code>
Nach dem Login kopieren
Nach dem Login kopieren

然后使用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属性里面吗?

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage