Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
yii框架php中的条件_Php_Mysql_Yii - Fatal编程技术网

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是163
getTotalItemCount
具有类似于
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';