2014-05-06 93 views
0

所以我在我的模型中有一个函数,它可以通过分页表工作,但只有当它们没有被预订时才会执行。Codeigniter动态分页和where_not_in

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

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无效参数。

我已经搞砸了很多方法,如果可能的话,宁愿积极记录,但我没有成功。

感谢,

回答

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


或用于cicount的替代方法,

$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; 
+0

谢谢!这样一个小东西! – Awilson089

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"); 
} 
+0

谢谢!给了Parag提供文档的答案! – Awilson089