如何用yii编写查询?

如何用yii编写查询?,yii,Yii,如何用yii编写距离查询,我在一个表中有lat和lng距离,但想在另一个表中显示详细信息 在我这样写的模型中 public function relations() { return array( 'offerimage' => array(self::HAS_ONE, 'OfferImage', 'offer_id'), //'wiffy_offer' => array(self::HAS_MANY, 'WiffyMemberO

如何用yii编写距离查询,我在一个表中有lat和lng距离,但想在另一个表中显示详细信息

在我这样写的模型中

public function relations() {       
    return array(
        'offerimage' => array(self::HAS_ONE, 'OfferImage', 'offer_id'),
        //'wiffy_offer' => array(self::HAS_MANY, 'WiffyMemberOffer', 'off_id'),
        'wiffy_offer' => array(self::HAS_MANY, 'WiffyMemberOffer', 'off_id',
            'condition'=>'wiffy_offer.uid='.Yii::app()->user->id,
            'order'=>'wiffy_offer.id DESC'),
        'user' => array(self::BELONGS_TO,'User','uid'),
        'merchant'=>array(self::BELONGS_TO,'Merchant',array('uid'=>'uid')),
'offermerchant' => array(self::HAS_MANY, 'Merchant', 'uid',
'condition'=>' ( 3959 * acos( cos( radians(-3.58) ) * cos( radians( offermerchant.city_lat ) ) * cos( radians( offermerchant.city_lng ) - radians(55.466646) ) + sin( radians(-3.52) ) * sin( radians( offermerchant.city_lat ) ) ) ) As distance'),
 );         );
}
CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'As distance)' at line 1. The SQL statement executed was: SELECT `t`.`offer_id` AS `t0_c0`, `t`.`uid` AS `t0_c1`, `t`.`offer_title` AS `t0_c2`, `t`.`no_of_users` AS `t0_c3`, `t`.`from_date` AS `t0_c4`, `t`.`to_date` AS `t0_c5`, `t`.`ex_offer_price` 
在控制器中

   public function actionOffersdetails($id){
   $log_id = Yii::app()->user->id;
   $criteria = new CDbCriteria;
   if(User::model()->isWiffy())
    {
        $addedoffers = WiffyMemberOffer::model()->findAllByAttributes(array('uid' => Yii::app()->user->id));
        foreach ($addedoffers as $offers) {
            $offerids[] = $offers->off_id;
        }

        $criteria->addNotInCondition('t.offer_id', $offerids);
    }

    else
    {

        $criteria->addCondition("uid='{$log_id}'");

    }  

        $criteria->addCondition("to_date>='{$dates}'");

        $criteria->with = array('offermerchant');
      $criteria->having = 'offermerchant.distance < 4';
      $criteria->addCondition("to_date>='{$dates}'"); 
     $offerdet = Offers::model()->findAll($criteria);
   }
我的代码出了什么问题?如何计算距离


在Merchant表中,有lat和lng值,其他表提供了我想显示的详细信息。

尝试下面的查询来计算距离

MySQL:

$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) * sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)* pi()/180))))*180/pi())*60*1.1515 ) as distance FROM `YourTable` WHERE distance >= ".$distance.";
使用“have”的最佳实践是使用“groupby”函数。你可以用“Where”代替。类似于下面在Yii中提到的内容

您可以使用
$criteria->condition()或$criteria->addCondition()


希望能有所帮助。

再显示一些代码…所有相关的操作代码都更好a我添加了我的整个关系代码我要求在您用于设置条件的操作中使用代码控制器..添加了我的控制器代码以尝试生成在数据库上运行的sql,然后将其转换为yii。我认为您的CDbCriteria是错误的。