yii框架php中的条件
我得到了这个错误:yii框架php中的条件,php,mysql,yii,Php,Mysql,Yii,我得到了这个错误: 未找到列:“where子句”中的1054未知列“spcount” 如果省略该条件,查询工作正常&按spcount订购业务。那么,我如何重写此查询,以便获得spcount大于1的所有业务?据我所知,您不能在WHERE部分()中引用别名。删除条件行并添加以下内容: $criteria=new CDbCriteria(); $criteria->with = array('reviewCount', 'category10', 'category20', 'category3
未找到列:“where子句”中的1054未知列“spcount”
如果省略该条件,查询工作正常&按spcount订购业务。那么,我如何重写此查询,以便获得spcount大于1的所有业务?据我所知,您不能在
WHERE
部分()中引用别名。删除条件行并添加以下内容:
$criteria=new CDbCriteria();
$criteria->with = array('reviewCount', 'category10', 'category20', 'category30', 'town');
$criteria->select = 't.id,business,street,postalCode,contactNo,checkinCount,count(tbl_abc.id) as spcount';
$criteria->join = 'left join tbl_abc on t.id=tbl_abc.businessId';
$criteria->group = 't.id';
$criteria->order = 'spcount DESC';
$criteria->condition='spcount>1';
$bizModel = new CActiveDataProvider(Business::model(), array(
'criteria' => $criteria
));
更新
,因此您需要一个模型范围:
$criteria->having = 'COUNT(tbl_abc.id) > 1';
也许您可以使用子选择查询
例如,在条件对象的“选择”部分:
<?php
class Business extends CActiveRecord
{
public function scopes()
{
return array(
'hasSpcount' => array(
'with' => array('reviewCount', 'category10', 'category20', 'category30', 'town'),
'select' => 't.id,business,street,postalCode,contactNo,checkinCount,count(tbl_abc.id) as spcount',
'join' => 'left join tbl_abc on t.id=tbl_abc.businessId',
'group' => 't.id',
'order' => 'spcount DESC',
'having' => 'COUNT(tbl_abc.id) > 1',
),
);
}
}
// usage
$provider = new CActiveDataProvider(Business::model()->hasSpcount());
或者作为内部联接(也可以包含“where spcount>1”条件):
在这两种情况下,spcount在查询的where子句中也可用。此外,“GROUPBY t.id”不再是必需的,因为spcount现在是主表(“t”)每行的单个值
希望这能帮上忙。但这有一个问题$bizModel->getTotalItemCount()是613,这实际上是忽略筛选器spcount>1的记录总数。但除此之外,它会显示过滤后的结果。因为我使用的是Clistview,所以在分页时会产生问题。当它只有7-8条记录时,它显示7页的分页。@我想你不能重写getTotalItemCount
来应用筛选器?不使用筛选器查看,即$criteria->have='spcount>1'getTotalItemCount=163。使用过滤器getTotalItemCount应该是8,因为它显示8条记录,但getTotalItemCount是163getTotalItemCount
具有类似于SELECT COUNT(*)AS cnt…
?你能发布这个方法中使用的SQL吗?我想你还没有明白我的最后一个问题。过滤工作正常。但是getTotalItemCount的值不是过滤的记录数。可能是Yii count对“have”的作用不同。这就是为什么对于clistview分页,我得到了错误的页数
$criteria->select = 't.id,business,street,postalCode,contactNo,checkinCount,(select count(id) from tbl_abc where t.id=businessId) as spcount';
$criteria->join = 'join (select businessId, count(*) as spcount from tbl_abc) abc on t.id=abc.businessId and abc.spcount>1';