複数の結果セットをページ分割する必要があります。これまでのところ、私のクエリは次のようになっています。
// 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);
つまり、元のクエリは完全な結果セットを取得して配列内に配置し、ページのオフセットに応じてスライスします。