Php Codeigniter分页-多个表

Php Codeigniter分页-多个表,php,sql,sql-server-2008,codeigniter,codeigniter-pagination,Php,Sql,Sql Server 2008,Codeigniter,Codeigniter Pagination,我需要对多个结果集进行分页,到目前为止,我的查询如下: // setting offset for pagination $offset=is_numeric($this->uri->segment($page_segment))? $this->uri->segment($page_segment): 0;

我需要对多个结果集进行分页,到目前为止,我的查询如下:

// setting offset for pagination
            $offset=is_numeric($this->uri->segment($page_segment))?
                                $this->uri->segment($page_segment):
                                0;

     $q = "
    SELECT 
      Notices.Id, 
      NoticeLoc.Notices_Id,
      Loc.Id as Loc_Id, 
      CAST(Notices.Text AS TEXT) as Text, 
      CAST(Notices.Title AS TEXT) as Title, 
      Notices.CDate as RDate 
    FROM NoticeLoc 
      JOIN Notices ON NoticeLoc.Notices_Id=Notices.Id JOIN Loc ON NLoc.Loc_Id=Loc.Id WHERE Loc_Id IN (1)

    UNION 

    SELECT  
      Notices.Id, 
      '',
      '', 
      CAST(Notices.Text AS TEXT) as Text, 
      CAST(Notices.Title AS TEXT) as Title, 
      Notices.CDate as RDate 
    FROM NoticeC 
      JOIN Notices ON NoticeC.Notices_Id=Notices.Id WHERE C_Id=110 AND CDate BETWEEN '10/01/2011' AND '07/14/2025' ORDER BY RDate desc ";

$query = $this->db->query($q);
//result array
    $Notices = $query->result_array();
//count total number of records in query    
    $recCnt = count($Notices);


//pagination
//slice array, so that you only get the amount defined in the limit
$config['total_rows'] = array_slice($query, $page_segment , $limit);
$config['per_page'] = $limit;

$this->pagination->initialize($config);

//pass onto the controller

return array("paging"=>$this->pagination->create_links(),"notices"=>$notices);  
$config['total_rows'] = $recCnt;
我似乎无法使最后一部分正常工作,页面成功加载了所有通知,但分页失败。页面最后显示所有的通知,而不是切片数组后的特定通知

知道为什么吗

干杯

修正如下:

// setting offset for pagination
            $offset=is_numeric($this->uri->segment($page_segment))?
                                $this->uri->segment($page_segment):
                                0;

     $q = "
    SELECT 
      Notices.Id, 
      NoticeLoc.Notices_Id,
      Loc.Id as Loc_Id, 
      CAST(Notices.Text AS TEXT) as Text, 
      CAST(Notices.Title AS TEXT) as Title, 
      Notices.CDate as RDate 
    FROM NoticeLoc 
      JOIN Notices ON NoticeLoc.Notices_Id=Notices.Id JOIN Loc ON NLoc.Loc_Id=Loc.Id WHERE Loc_Id IN (1)

    UNION 

    SELECT  
      Notices.Id, 
      '',
      '', 
      CAST(Notices.Text AS TEXT) as Text, 
      CAST(Notices.Title AS TEXT) as Title, 
      Notices.CDate as RDate 
    FROM NoticeC 
      JOIN Notices ON NoticeC.Notices_Id=Notices.Id WHERE C_Id=110 AND CDate BETWEEN '10/01/2011' AND '07/14/2025' ORDER BY RDate desc ";

$query = $this->db->query($q);
//result array
    $Notices = $query->result_array();
//count total number of records in query    
    $recCnt = count($Notices);


//pagination
//slice array, so that you only get the amount defined in the limit
$config['total_rows'] = array_slice($query, $page_segment , $limit);
$config['per_page'] = $limit;

$this->pagination->initialize($config);

//pass onto the controller

return array("paging"=>$this->pagination->create_links(),"notices"=>$notices);  
$config['total_rows'] = $recCnt;
最后写道:

    $notices = array_slice($notices, $offset , $limit);

换句话说,原始查询获取完整的结果集并将其放入数组中,然后根据页面的偏移量对其进行切片。

我已经解决了这个问题,但您可能应该发布答案,如果有人遇到同样的问题,它将帮助他们。