【问题标题】:how to convert count(*) and group by queries to yii and fetch data from it如何将 count(*) 和 group by 查询转换为 yii 并从中获取数据
【发布时间】:2013-05-14 04:06:58
【问题描述】:

我想在 yii 中转换这个查询

SELECT count(*) AS cnt, date(dt) FROM tbl_log where status=2 GROUP BY date(dt) 

并从中获取数据。我试试这个命令(dt 是日期时间字段):

$criteria = new CDbCriteria();
$criteria->select = 'count(*) as cnt, date(dt)';
$criteria->group = 'date(dt)';
$criteria->condition = 'status= 2';
$visit_per_day = $this->findAll($criteria);

但不会获取任何数据! 我可以做什么来获取数据?

【问题讨论】:

    标签: select yii count


    【解决方案1】:

    您可能看不到任何数据,因为您需要将数据分配给不存在的模型属性。

    $criteria = new CDbCriteria();
    $criteria->select = 'count(*) AS cnt, date(dt) AS dateVar';
    $criteria->group = 'date(dt)';
    $criteria->condition = 'status= 2';
    $visit_per_day = $this->findAll($criteria);
    

    这意味着您的模型必须具有属性 cnt 和 dateVar 才能显示您的数据。如果您需要自定义查询,请查看 Hearaman 的答案。

    【讨论】:

    • 如何获取cnt值?我正在尝试这样 $visit_per_day->cnt。但不工作
    【解决方案2】:

    试试下面的代码

         $logs = Yii::app()->db->createCommand()
                ->select('COUNT(*) as cnt')
                ->from('tbl_log')  //Your Table name
                ->group('date') 
                ->where('status=2') // Write your where condition here
                ->queryAll(); //Will get the all selected rows from table
    

    访客人数为:

        echo count($logs); 
    

    除了使用 cDbCriteria 之外,同样检查此链接 http://www.yiiframework.com/forum/index.php/topic/10662-count-on-a-findall-query/

    【讨论】:

      【解决方案3】:

      如果你使用 Yii2 并且有一个基于表 tbl_log 的模型,你可以像这样使用模型样式:

      $status = 2;
      $result = Model::find()
          ->select('count(*) as cnt, date(dt)')
          ->groupBy('date(dt)')
          ->where('status = :status')
          ->params([':status' => $status ])
          ->all();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2021-12-19
        • 2019-05-01
        • 2020-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多