Как добавить paginate с конкретным запросом?
Вот мой запрос:
SELECT emptb.*, tempstore.* FROM (SELECT * FROM emptb WHERE Department = :dept)emptb inner join tempstore
on emptb.EmpID = tempstore.EmpID WHERE tempstore.ValidDate BETWEEN DATE(:fromDate) AND DATE(:toDate)
Примечание. Когда я добавляю пагинацию, следующая и предыдущая кнопки не работают, она застряла в первой записи, которую видит в таблице. Можете ли вы дать мне несколько хороших страниц для такого рода запросов?
Разбивка на страницы работает, потому что вы указываете ограничение для предложения sql, но в приведенном выше запросе его нет. Кроме того, я обнаружил, что теперь вам нужно общее количество записей, которое вы можете ожидать — отсюда и количество!
Быстрый пример, надеюсь, это то, что вы имели в виду …
$pageNumber=0;
$startRow=0;
$maxRows=10;
$sql="select
(
select count(*) from ( select * from `emptb` where `department` = :dept ) emptb
inner join `tempstore` on emptb.`empid` = tempstore.`empid`
where tempstore.`validdate`
between date(:fromdate) and date(:todate)
) as 'dbrecordcount',
emptb.*,
tempstore.* from ( select * from `emptb` where `department` = :dept ) emptb
inner join `tempstore` on emptb.`empid` = tempstore.`empid`
where tempstore.`validdate`
between date(:fromdate) and date(:todate)
limit $startRow, $maxRows;";
/* above would show the first 10 records */
-> ie: records 0,10
/* Page number is increased by 1 after clicking pagination link / button */
-> $startRow=$pageNumber * $maxRows ~ equals 10;
-> would then show records from 10,20
/* To derive the pagination links, something like this perhaps... */
/* Number of records per page */
$maxRows=10;
/* The total number of expected rows: uses db result 'dbrecordcount' */
$totalRows=$db->dbrecordcount;
/* Current page within paged results: retrieve `page` from querystring if using GET method */
$pageNumber=$_GET['page'];
/* How many pages of results are there */
$totalPages=( $maxRows > 0 ) ? abs( ceil( $totalRows / $maxRows ) - 1 ) : 0;
/* Where does paging begin */
$startRow=$pageNumber * $maxRows;
/* Display pagination links if there are sufficient number of records */
if( $totalPages > 0 && $totalRows > $maxRows ){
/* First record link */
if( $pageNumber==0 ) {
echo "First";
} else {
echo "<a href='?page=0'>First</a>";
}
/* Previous record link */
if( $pageNumber > 0 ){
echo "<a href='?page=".max( 0, $pageNumber - 1 )."'>Previous</a>";
} else {
echo "Previous";
}
/* Next record link */
if( ( $pageNumber + 1 ) > $totalPages ){
echo 'Next';
} else {
echo "<a href='?page=".min( $totalPages, $pageNumber + 1 )."'>Next</a>";
}
/* Last record link */
if( $pageNumber==$totalPages ){
echo 'Last';
} else {
echo "<a href='?page=".$totalPages."'>Last</a>";
}
}
Других решений пока нет …