【问题标题】:MySql Count not Accurate. CodeigniterMySql 计数不准确。代码点火器
【发布时间】:2013-11-15 17:16:32
【问题描述】:

我目前正在使用 Codeigniter。如下所示,查询查找行数,然后将其发送到视图。但是,视图不显示实际计数。 DB(InnoDB)的实际计数是 1001,但在我看来最多显示 1000。有任何想法吗?

    Model:
    public function check_source_email($location){
    $query="SELECT COUNT(*) as row_count FROM feedback WHERE location = '$location' AND source_lead = 'Email' ";
    $count=$this->db->query($query)->result();
    return $count[0]->row_count;
} 

    Controller:
    $data['email'] = $this->Stats->check_source_email($location); 

    View:
    <strong>Email Listing</strong><span class="pull-right"><?php echo $email; ?></span>              

【问题讨论】:

  • 你的意思是,如果你通过命令行界面运行查询,你会得到 1001,但如果你通过 php/codeigniter 运行,你会得到 1000?
  • 没错。我不知道为什么。我根本没有任何“限制”。我知道使用 InnoDB 有一些限制,但我不确定扩展到什么。
  • 您是否尝试过对字段进行选择并返回 num_rows()?只是看看有没有区别?喜欢SELECT id` FROM `feedback``...

标签: php mysql codeigniter


【解决方案1】:

使用num_rows:

public function check_source_email($location){

   $query = $this->db->get_where('feedback',array('location'=>$location,'source_lead'=>'Email'));
   return $query->num_rows();

} 

【讨论】:

  • 这不还是从反馈中选择所有数据吗?基本上是$results = $db-&gt;query('SELECT * FROM feedback'); count($results); 那太低效了。 I think you want count_all_results() 代替。
【解决方案2】:

首先,如果您使用的是 codeigniter,我会尝试以 codeigniter 的方式做事:

public function check_source_email($location) {
  return $this->db
    ->where('location', $location)
    ->where('source_lead', 'Email')
    ->count_all_results('feedback');
}

理论上应该返回正确的结果,虽然我不确定为什么你原来的没有,但也许这会解决它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2012-02-09
    • 2011-06-04
    • 2016-01-28
    • 2012-06-30
    • 2012-02-21
    相关资源
    最近更新 更多