Mysql 如何在CGridView中显示SQL计算列

Mysql 如何在CGridView中显示SQL计算列,mysql,sql,yii,Mysql,Sql,Yii,以下是我拥有的数据库表: 旅行 身份证 容量 三重注册 身份证 三脚架 名字 姓氏 电话 注册状态 SQL查询 我想要一个sql查询,它将为我提供足够自由容量的行程。有效注册的TripRegistration.RegistrationState已批准。这是sql查询: SELECT t.*,count(*) as registeredNum FROM trip t left join (select * from trip_registerat

以下是我拥有的数据库表:

旅行
  • 身份证
  • 容量
三重注册
  • 身份证
  • 三脚架
  • 名字
  • 姓氏
  • 电话
  • 注册状态
SQL查询 我想要一个sql查询,它将为我提供足够自由容量的行程。有效注册的TripRegistration.RegistrationState已批准。这是sql查询:

SELECT t.*,count(*) as registeredNum 
FROM trip t 
left join 
    (select * 
            from trip_registeration tr
            where tr.registerationState="approved"
            ) trlist
    on t.id =trlist.tripId 
group by t.id
having t.capacity>registeredNum
Yii代码 这是在
DBTrip
activerecord模型中获取数据提供程序的Yii-PHP代码

public function getAvailableTripsDataProvider()
{
    $criteria = new CDbCriteria();
    $criteria->select = 't.*, COUNT( * ) AS registeredNum';
    $criteria->join =
    'left join (select *
    from trip_registeration tr
    where tr.applicationState="initialized"
    ) trlist
    on t.id =trlist.tripId';
    $criteria->group = 't.id';
    $criteria->having = 't.capacity > registeredNum';

    return new CActiveDataProvider ( 'DBTrip', array (
            'criteria' => $criteria
    )
}
问题
一切正常,只是我无法在CGridView中获取
registeredNum
的值,
'value'=>'var\u dump($data)
只显示相应的DBTrip行的属性,它没有任何关于
registeredNum
的信息。如何在CGridView中显示它?

您需要将
registeredNum
作为公共属性添加到
DBTrip
模型中:

class DBTrip extends CActiveRecord{
    public $registeredNum;
除此之外,我想知道你为什么做那个不必要的子选择。您只需将该条件添加到
ON
子句中,即可使查询更具可读性

$criteria->join ='left join trip_registration tr ON 
    t.id=trlist.tripId AND tr.applicationState="initialized"';

关于子选择,因为在没有
tr
的情况下,左连接不会给我结果,因为
on
标准不是
true
。。。谢谢,成功了:)左连接确实会返回相同的结果。你试过了吗?是的,我相信我,它没有:)。我没有勇气再做一次选择(就像你一样),但我不得不这么做。似乎如果
状态中的
中的一列与
t
不相关,比如
tr.applicationState=“initialized”
语句将表示为
false