【问题标题】:codeigniter count / with group by [duplicate]codeigniter 计数 / 与 group by [重复]
【发布时间】:2012-10-18 13:22:23
【问题描述】:

我的数据库中有一个表ANKETADATA,其中包含一个列PROVO。我想要这样的输出:

povremeno : 15。 (数字显示在 PRVO 列中找到该行的次数) nikad : 40.

型号:

$anketadb = $this->load->database('anketa',TRUE);

    $anketadb->select('prvo');
    $anketadb->from('anketadata');
    $anketadb->group_by('prvo');
$result =   $anketadb->get();

$result =   $result->result_array();

$count  =   array('povremeno' => 0, 'nikad' => 0, 'svakibroj' => 0, 'prodajemkupujem' => 0);

foreach($result as $row){
    switch($row){
        case 'povremeno' :  $count['povremeno']++; break;
        case 'nikad' : $count['nikad']++; break;
        case 'svakibroj' :  $count['svakibroj']++; break;
        case 'prodajemkupujem' : $count['prodajemkupujem']++; break;
    }
}
return $count;

控制器:

$this->load->model('anketerezultati_model');
    $data['count'] = $this->anketerezultati_model->prvo();
    $this->load->view('ankete/rezultatiankete', $data);

查看:

echo "povremeno".$count['povremeno'];
echo "nikad".$count['nikad'];

两者的结果都是 0。我找不到错误。

【问题讨论】:

  • 我解决了这个问题:我把行 $anketadb->group_by('prvo');比它计算的一切都像我想要的那样

标签: mysql sql codeigniter group-by


【解决方案1】:

摆脱这个:

$anketadb->group_by('prvo');

你的 foreach:

foreach($result as $row){
   $val = $row['prvo'];
   $count[$val]++;
}

【讨论】:

  • 现在我有一些 1 和 0....但我有 80 行...所以我不明白怎么...出了点问题
  • 我刚刚更新了我的代码 sn-p 以避免 switch 语句。看看结果如何。
  • 我这样看,它会计算所有行的数量。我错了吗?
  • 我解决了这个问题:我把行 $anketadb->group_by('prvo');比它计算的一切都像我想要的那样
【解决方案2】:

使用这样的 SQL 查询会不会更快:

SELECT COUNT(*) as `count`, `prvo` FROM `anketadata` GROUP BY `prvo`

【讨论】:

  • 我解决了这个问题:我把行 $anketadb->group_by('prvo');比它计算的一切都像我想要的那样
  • 它的工作原理是这样的,但是如果您在 prvo 列中获得更多值,您的代码将停止工作,并且如果您有大量记录,那么实现正确的速度会慢很多查询
  • 在这个表中,我不能有另一个值,因为表单中有一个单选按钮。不过谢谢你的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2012-09-24
  • 2012-06-15
  • 1970-01-01
相关资源
最近更新 更多