gpt4 book ai didi

mysql - 如何在 CGridView 中显示 SQL 计算列

转载 作者:行者123 更新时间:2023-11-30 01:18:39 24 4
gpt4 key购买 nike

这些是我拥有的数据库表:

行程

  • ID
  • 容量
  • ...

行程注册

  • ID
  • 行程ID
  • 名字
  • 姓氏
  • 电话
  • ...
  • 注册状态

sql查询

我想要一个 sql 查询,它将为我提供有足够可用容量的行程。有效注册的 tripRegisteration.registerationState 已approved。这是 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 中获取 registerednNum 的值,'value' => 'var_dump($data)' 只是显示相应的 DBTrip Row 的属性,并且它没有任何关于 registeredNum 的信息。我如何在 CGridView 中显示它?

最佳答案

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

class DBTrip extends CActiveRecord{
public $registeredNum;

除此之外,我想知道你为什么要进行不必要的子选择。您只需将该条件添加到您的 ON 子句中,这将使您的查询更具可读性。

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

关于mysql - 如何在 CGridView 中显示 SQL 计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com