Разбиение на кодовый указатель не показывает первую строку результата запроса - PullRequest
4 голосов
/ 14 августа 2011

Как вы можете видеть ниже, я запрашиваю базу данных для списка вопросов.

Моя модель возвращает количество вопросов (count_questions()), а также сами вопросы (get_questions($args)), которыезатем разбит на страницы.

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

Странное поведение, которое я вижу, состоит в том, что count_questions() возвращает '25' (что правильно).

Но результат разбивки на страницы показывает 24 вопроса, пропуская первыйстрока / вопрос в моей базе данных.

Сначала я подумал, что это может быть из-за неправильного смещения, но на первой странице установлено значение 0.

Если я НЕ использую нумерацию страниц, мойконтроллер выводит все 25 вопросов на мой взгляд.Так что, похоже, что-то, что я делаю с пределом / смещением нумерации страниц, может быть виновником.

Есть идеи, что здесь может быть не так?

Спасибо за помощь.

Модель (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;     
    ");

Модель (count_questions)

function count_questions()
{
    $query = $this->db->query("
    SELECT  *
    FROM    forum_qa
    WHERE   forum_qa_type = 1;
    ");

    return $query->num_rows;
}

Ответы [ 3 ]

1 голос
/ 14 сентября 2011

return $query->num_rows; должно быть return $query->num_rows();.

Также попробуйте изменить LIMIT $limit OFFSET $offset на LIMIT $offset,$limit.

0 голосов
/ 25 февраля 2016

Проблема в том, что при выполнении страницы по умолчанию она начинает запись с 1-й строки вместо нуля, поэтому первая строка отсутствует. Я применил следующий код для решения этой проблемы

$ page = ($ this-> uri-> сегмент (3))? $ this-> uri-> сегмент (3): 0;

Пожалуйста, измените сегмент согласно URL вашего запроса

0 голосов
/ 14 сентября 2011
$this->uri->segment(3, 0);

По умолчанию функция возвращает FALSE (логическое значение), если сегмент не существует.так что я думаю не правильно!?

($offset      === NULL) ? ($offset = 0) : ($offset = $offset);
...