【问题标题】:$offset not working for pagination codeigniter$offset 不适用于分页 codeigniter
【发布时间】:2013-05-23 07:05:09
【问题描述】:

我正在尝试在我的搜索结果页面中实现分页。我昨天问了这个问题没有成功Records not limited on searchpage using codeigniter pagination

而我现在遇到的问题有点不同。

情况

我的分页链接正在工作,我看到网址更改如下:http://example.com/home/searchresults/2(用于分页的第二页)等。 但是所有的搜索结果都会显示出来。当我将限制编辑为 1 时,我会获得更多链接,因此可以正常工作。

问题

这个愚蠢的问题可能是什么?我认为这与我的 Total_rows 有关

我的控制器:

    function searchresults()
    {   
        $this->breadcrumbs->page = array('link'=> base_url().'home/search' ,'title' => 'Bedrijven Zoeken' );            
        $this->breadcrumbs->method = array('link'=> base_url().'home/searchresults' ,'title' => 'Zoekresultaten' );
        $data['breadcrumbs'] = $this->breadcrumbs->get();
        $match = $this->input->post('search');
        if(strlen($this->input->post('cookie')) > 0){ $match2 = $this->input->post('cookie'); } else{ $match2 = '9101'; }

        $this->load->library('pagination');

        $limit = 4;
        $offset=($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
        $config['base_url'] = base_url().'home/searchresults/';
        $config['total_rows'] = count($this->bedrijven_model->get_search($match, $match2, $limit, $offset ));
        $config['per_page'] = $limit;
        $config['use_page_numbers'] = TRUE;
        $config['num_links'] = 5;   

        $this->pagination->initialize($config);
        $offset = $this->uri->segment(3);
        $data['links'] = $this->pagination->create_links();
        //$data['query'] = $this->bedrijven_model->get_search($match, $match2, 2147483647, 0); /*large number as limit to retrieve all the rows*/           
        $data['query_curr'] = $this->bedrijven_model->get_search($match, $match2, $config['per_page'], $this->uri->segment(3) );
        $this->load->view('views/header');
        $this->load->view('views/searchresults', $data);
        $this->load->view('views/footer');
    }

我的模特:

function get_search($match, $match2, $limit, $offset=0)
{
    if(!isset($_SESSION)) 
    { 
    session_start();
    };
    /*
    $string = implode($_SESSION['postcodes'], '|');
    $string2 = $_SESSION['searched_post_code'];
    */
    $postcodes = (is_array($_SESSION['postcodes']) ? $_SESSION['postcodes'] : array());
    $postcodes[] =  $_SESSION['searched_post_code'];
    $postcodes = array_filter(filter_var_array($postcodes, FILTER_VALIDATE_INT));
    $string = join(',', $postcodes);

        if (!isset($_COOKIE['cookie'])) { 

            $query = "SELECT * FROM (`bedrijfcategorieen`) 
            JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven` 
            JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen` 
            WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%' 
            OR `Plaats` LIKE '%".$this->input->post('search')."%' 
            OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%' 
            OR `Email` LIKE '%".$this->input->post('search')."%' 
            OR `Website` LIKE '%".$this->input->post('search')."%' 
            OR `Profiel` LIKE '%".$this->input->post('search')."%' 
            OR `Adres` LIKE '%".$this->input->post('search')."%' 
            OR `Categorie` LIKE '%".$this->input->post('search')."%') 
            AND (Postcode IN ($string))

            GROUP BY `Categorie`,  `bedrijfcategorieen`.`idbedrijven`";
            $query = $this->db->query($query);
            $this->db->limit($limit, $offset);
            echo '<pre>';
            echo '</pre>';
            $result = $query->result_array();
            return $result;
      }

我希望有人可以帮助我解决这个问题。我已经为此苦苦挣扎了将近 3 个小时。

【问题讨论】:

    标签: php codeigniter search pagination offset


    【解决方案1】:

    您需要在$querystring 中设置限制/偏移量:

    $query = "SELECT * FROM (`bedrijfcategorieen`) 
            JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven` 
            JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen` 
            WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%' 
            OR `Plaats` LIKE '%".$this->input->post('search')."%' 
            OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%' 
            OR `Email` LIKE '%".$this->input->post('search')."%' 
            OR `Website` LIKE '%".$this->input->post('search')."%' 
            OR `Profiel` LIKE '%".$this->input->post('search')."%' 
            OR `Adres` LIKE '%".$this->input->post('search')."%' 
            OR `Categorie` LIKE '%".$this->input->post('search')."%') 
            AND (Postcode IN ($string)) 
            GROUP BY `Categorie`,  `bedrijfcategorieen`.`idbedrijven` 
            LIMIT ".$offset.", ".$limit;
    
           $result = $this->db->query($query);
           return $result->result_array();
    

    【讨论】:

    • 如果将 LIMIT 行更改为:LIMIT ".$limit.", 0"; 会发生什么?
    • 我将其更改为 LIMIT '$limit', '$offset' "; 但我仍然收到 sql 错误。但现在的输出看起来像这样。i.imgur.com/Oy7xB6P.png
    • 这不是我问的。看看LIMIT ".$limit.", 0";给你带来了什么。
    • 这没什么区别.. $offset 输出 0 因此将 0 更改为 0 不会做任何事情。
    • 错了。 i.imgur.com/6jNQz6J.png ---> 这里没有输出 $offset。这就是我手动添加, 0 的原因。或者,试试LIMIT $limit, $offset"; 不连接。
    【解决方案2】:

    $this-&gt;db-&gt;limit 仅适用于活动记录。不管怎样,把你的查询改成这个

    $query = "SELECT * FROM (`bedrijfcategorieen`) 
            JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven` 
            JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen` 
            WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%' 
            OR `Plaats` LIKE '%".$this->input->post('search')."%' 
            OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%' 
            OR `Email` LIKE '%".$this->input->post('search')."%' 
            OR `Website` LIKE '%".$this->input->post('search')."%' 
            OR `Profiel` LIKE '%".$this->input->post('search')."%' 
            OR `Adres` LIKE '%".$this->input->post('search')."%' 
            OR `Categorie` LIKE '%".$this->input->post('search')."%') 
            AND (Postcode IN ($string))
            GROUP BY `Categorie`,  `bedrijfcategorieen`.`idbedrijven`
            LIMIT $offset,$limit";
            $query = $this->db->query($query);
    

    还有一点,不用$this->db->limit

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 2014-04-13
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多