2012-02-13 108 views
0

任何人都可以告诉我如何在CDBCriteria查询中使用sql'AS'语句吗?在Yii中使用SQL'AS'语句CDBCriteria

无论我累了什么,只是将我的表的列名称带回数组中,并且没有我的sql别名符号。

我想我可能已经将其添加到我的模型类,但林不知道在哪里可以多次尝试将其添加在后声明。

这里是我的,你可以看到“距离”是我的别名:

$criteria= new CDbCriteria; 
    $criteria->select='*, 3963 * acos(cos(radians('.$distanceString['latitude'].')) * cos(radians(latitude)) * cos(radians('.$distanceString['longitude'].') - radians(longitude)) + sin(radians('.$distanceString['latitude'].')) * sin(radians(latitude))) AS distance'; 
    $criteria->condition=$sqlCondition; 
    $criteria->params=$sqlVariables; 
    $criteria->order='distance'; 

感谢您的任何提示或帮助提前! :)

回答

1

您是否将此与CActiveDataProvider用于活动记录类?如果是这样,请尝试在该班级中定义距离。

0

使用CDbCommand代替

 
$rawData=Yii::app()->db->createCommand() 
    ->select('*, 3963 * acos(cos(radians('.$distanceString['latitude'].')) * cos(radians(latitude)) * cos(radians('.$distanceString['longitude'].') - radians(longitude)) + sin(radians('.$distanceString['latitude'].')) * sin(radians(latitude))) AS distance') 
    ->from('TableName') 
    ->where($sqlCondition) 
    ->order('distance')->queryAll(true,$sqlVariables); 

如。加上CArrayDataProvider

 
$dataProvider=new CArrayDataProvider($rawData); 
// $dataProvider->getData() will return a list of arrays.