As you can see below, I am querying the database for a list of questions.
My model returns the number of questions ( count_questions() ), as well as the questions themselves ( get_questions($args) ), which are then paginated.
$limit = '10'; $count = $this->forum_model->count_questions(); $offset = $this->uri->segment(3, 0); $this->load->library('pagination'); $config['base_url'] = base_url() . 'forum/all/'; $config['total_rows'] = $count; $config['per_page'] = $limit; $config['full_tag_open'] = '<div class="pagination">'; $config['full_tag_close'] = '</div>'; $config['uri_segment'] = 3; $this->pagination->initialize($config); $data['q'] = $this->forum_model->get_questions(NULL, $limit, $offset); $data['pag_links'] = $this->pagination->create_links();
The odd behavior that I see is that count_questions() returns "25" (this is correct).
But the paginated output displays 24 questions, skipping the first line / question in my database.
At first I thought it might be due to an incorrect offset, but on the first page it is set to 0.
If I DO NOT use pagination, my controller displays all 25 questions to my question. So it looks like I'm doing this with page limit / offset, which could be the culprit.
Any ideas what might be wrong here?
Thanks for the help.
Model (get_questions)
function get_questions($forum_qa_id = NULL, $limit = NULL, $offset = NULL) { ($forum_qa_id === NULL) ? ($forum_qa_id = "'%'") : ($forum_qa_id = $forum_qa_id); ($limit === NULL) ? ($limit = 1) : ($limit = $limit); ($offset === NULL) ? ($offset = 0) : ($offset = $offset); $query = $this->db->query(" SELECT forum_qa.*, user_profiles.*, c.*, n.pid, v.*, Ifnull(n.ans_count, 0) AS ans_count FROM forum_qa JOIN user_profiles ON user_id = forum_qa_author_id LEFT JOIN (SELECT * FROM votes) AS v ON forum_qa_id = v.forum_qa_id_fk LEFT JOIN (SELECT forum_cm_id, forum_cm_author_id, forum_qa_id_fk, forum_cm_text, forum_cm_timestamp, forum_cm_flag, first_name AS forum_cm_first_name, last_name AS forum_cm_last_name, facebook_id AS forum_cm_fb_id, picture AS forum_cm_picture, moderator AS forum_cm_moderator FROM forum_cm JOIN user_profiles ON user_id = forum_cm_author_id) AS c ON forum_qa_id = c.forum_qa_id_fk LEFT JOIN (SELECT forum_qa_parent_id AS pid, COUNT(*) AS ans_count FROM forum_qa WHERE forum_qa_parent_id IS NOT NULL GROUP BY forum_qa_parent_id) AS n ON forum_qa_id = n.pid WHERE forum_qa_id LIKE $forum_qa_id AND forum_qa_parent_id IS NULL ORDER BY forum_qa_timestamp DESC LIMIT $limit OFFSET $offset; ");
Model (count_questions)
function count_questions() { $query = $this->db->query(" SELECT * FROM forum_qa WHERE forum_qa_type = 1; "); return $query->num_rows; }