문제

So I have a function in my model which pulls through jobs for a paginated table but only if they have not been booked.

My first function counts the results for how many pages there are etc.

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

My second actually brings in the 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;
}

The problem is that the second function gets the jobs fine, and doesn't display the ones that are booked. But the first function which counts the pages still seems to count all the results, even the booked ones. Thus giving me empty pages and PHP invalid arguments on my paginated results.

I've messed around with a lot of ways, and would prefer active record if possible but I had no success with that.

Thanks,

도움이 되었습니까?

해결책

You have a wrong statement here,

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

count_all("jobs") will give you number of rows in jobs table.


Replace it with this -

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

Read documentation - http://ellislab.com/codeigniter/user-guide/database/active_record.html


OR an alternative method for count in ci,

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

다른 팁

In your implementation you are using function $this->db->count_all which counts all rows in a table.

If you want to count the number of rows in your particular query, you should use $this->db->count_all_results function. Correct implementation is:

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");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top