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
- 身份证
- 容量
- 身份证
- 三脚架
- 名字
- 姓氏
- 电话
- 注册状态
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
。