Codeigniter动态分页和where_not_in

时间:2014-05-06 18:07:25

标签: php mysql codeigniter pagination

所以我在我的模型中有一个函数,它可以为一个分页表提供工作,但前提是它们还没有被预订。

我的第一个函数计算了有多少页面的结果等。

function record_count() {
  $this->db->select('id');
  $this->db->from('jobs');
  $this->db->where('`id` NOT IN (SELECT `jobs_id` FROM `jobs_user`)', NULL, FALSE);
  return $this->db->count_all("jobs");
}

我的第二个实际上带来了工作。

function getPagedJobs($limit, $start){
  $this->db->limit($limit, $start);
  $grabPagedJobs = $this->db->where('`id` NOT IN (SELECT `jobs_id` FROM `jobs_user`)', NULL, FALSE)->get("jobs");

  if ($grabPagedJobs->num_rows() > 0) {
    foreach ($grabPagedJobs->result() as $row) {
      $data[] = $row;
    }
    return $data;
  }
  return false;
}

问题是第二个函数可以正常工作,并且不会显示已预订的作业。但是,计算页面的第一个功能似乎仍然计算所有结果,即使是已预订的结果。因此,在我的分页结果上给我空页和PHP无效参数。

我用很多方法搞砸了,如果可能的话,我会更喜欢积极的记录,但我没有成功。

谢谢,

2 个答案:

答案 0 :(得分:1)

在您的实现中,您使用函数$this->db->count_all来计算表中的所有行。

如果要计算特定查询中的行数,则应使用$this->db->count_all_results函数。正确的实施是:

function record_count() {
  $this->db->select('id');
  $this->db->from('jobs');
  $this->db->where('`id` NOT IN (SELECT `jobs_id` FROM `jobs_user`)', NULL, FALSE);
  return $this->db->count_all_results("jobs");
}

答案 1 :(得分:1)

您的声明错误,

return $this->db->count_all("jobs");

count_all("jobs")会在jobs表格中为您提供行数。

用此替换 -

return $this->db->count_all_results("jobs");

阅读文档 - http://ellislab.com/codeigniter/user-guide/database/active_record.html


countci的替代方法,

$this->db->select('COUNT(*) as count');
$this->db->where('`id` NOT IN (SELECT `jobs_id` FROM `jobs_user`)', NULL, FALSE);
$query = $this->db->get('jobs');

$result = $this->db->result($query);
return $result->count;