在Yii CDBCriteria中使用SQL'AS'语句

时间:2012-02-13 10:53:54

标签: sql yii

有人能告诉我如何在CDBCriteria查询中使用sql'AS'语句吗?

无论我厌倦了什么,只是将我的表的列名称带回一个数组,并且没有我的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';

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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.