【问题标题】:How to limit/offset query with CONCAT inside GROUP_CONCAT to create pagination in codeigniter如何在 GROUP_CONCAT 中使用 CONCAT 限制/偏移查询以在 codeigniter 中创建分页
【发布时间】:2013-11-01 08:49:03
【问题描述】:

我的问题是我想从书籍列表中创建一个分页,我只是不知道如何使用活动记录或任何替代方法来做到这一点。这是我想要获取限制和偏移量以进行分页的查询。

   SELECT books.isbn,
              books.title,
              GROUP_CONCAT(CONCAT(author.fname,' ',author.lname)) AS FullName,
              books.date_published,
              books.price,
              books.stock,
              books.img,
              books.summary,
              books.status,
              bookscategory.id AS bookcategoryid,
              bookscategory.bookcategory FROM books 
            LEFT JOIN bookauthor
             ON books.isbn = bookauthor.isbn
            LEFT JOIN author 
            ON bookauthor.aid = author.id
            LEFT JOIN bookscategory 
            ON books.bookcategory = bookscategory.id
            WHERE books.stock > 0 GROUP BY books.isbn

提前致谢!

【问题讨论】:

    标签: php mysql codeigniter pagination


    【解决方案1】:

    试试这样的,你需要相应地改变它,

    你的控制器:

    $limit                      = 20;
    /*pagination start*/
    $this->load->library('pagination');
    $config['base_url']         = base_url().'controller_name/this_function_name/';
    $config['total_rows']       = $this->your_model->total_count_books();
    $config['per_page']         = 30;
    $config['uri_segment']      = 3;
    $config['next_link']        = 'Next';
    $config['prev_link']        = 'Prev';
    $config['cur_tag_open']     = '<span class="active_page">';
    $config['cur_tag_close']    = '</span>';
    $this->pagination->initialize($config);
    
    $data           = array();
    $data['books']  = $this->your_model->get_books($limit, $this->uri->segment( 3 ));
    

    您的模型功能:

    function total_count_books(){
        $sql    = "SELECT count( books.isbn ) as total FROM books 
            LEFT JOIN bookauthor
             ON books.isbn = bookauthor.isbn
            LEFT JOIN author 
            ON bookauthor.aid = author.id
            LEFT JOIN bookscategory 
            ON books.bookcategory = bookscategory.id
            WHERE books.stock > 0 GROUP BY books.isbn";
        $data   = $this->db->query( $sql )->row_array();
        return $data['total'];       
    }
    
    function get_books( $limit, $offset = 0 ){
        $sql    = "SELECT books.isbn,
              books.title,
              GROUP_CONCAT(CONCAT(author.fname,' ',author.lname)) AS FullName,
              books.date_published,
              books.price,
              books.stock,
              books.img,
              books.summary,
              books.status,
              bookscategory.id AS bookcategoryid,
              bookscategory.bookcategory FROM books 
            LEFT JOIN bookauthor
             ON books.isbn = bookauthor.isbn
            LEFT JOIN author 
            ON bookauthor.aid = author.id
            LEFT JOIN bookscategory 
            ON books.bookcategory = bookscategory.id
            WHERE books.stock > 0 GROUP BY books.isbn";
            if( !$offset ){
                $offset = 0;
            }
            $sql      .= " Limit {$offset}, {$limit}";
        return $data   = $this->db->query( $sql )->result_array(); #or ->result();
    }
    

    【讨论】:

    • 它给了我一个错误先生You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
    • 如果我删除 $sql .= " Limit {$limit}, {$offset}"; 它工作正常
    • $data['pagination'] = $this-&gt;pagination-&gt;create_links(); 我的控制器中有这段代码,但是当我尝试在视图中回显它时,它没有显示出来。
    • 首先在你的控制器中回显它。并回显total_count_books() 函数返回的total count
    猜你喜欢
    • 2017-05-03
    • 2016-09-19
    • 1970-01-01
    • 2012-05-17
    • 2022-08-19
    • 2012-07-13
    • 2015-11-30
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多