$total = 202; $limit = 50; $total_page = ceil( $total/$limit ); // ในการวน loop นี้ $i จะแทนเลขหน้าที่จะส่งกันด้วย $_GET หรือ $_POST ก็ตามนะครับ for ( $i=1; $i<=$total_page; $i++ ) { $start = ( $total-( $limit*$i ) ); if ( $start < 0 ) {$start = 0;} echo 'page '.$i.' start: '.$start.'<br />'; if ( $start == 0 ) {$limit = ($total%$limit);}// ส่วนที่เหลือนี้คือถ้า start = 0 ให้เอา $total%$limit จะได้จำนวนที่เหลือในหน้านั้นครับ ให้มัน limit ส่วนเหลือออกมาพอดีๆ echo 'limit: '.$limit.'<br /><br />'; }
Quote:page 1 start: 152 limit: 50 page 2 start: 102 limit: 50 page 3 start: 52 limit: 50 page 4 start: 2 limit: 50 page 5 start: 0 limit: 2
$sql = "select count( * ) from table where status = 'on'"; $query = mysql_query( $sql ); $total = mysql_result( $query, 0, 0); $limit = 50; // รับค่า"หน้า"ที่แบ่งมา $page = $_GET['page']; if ( !is_numeric( $page ) ) { $page = '1';// $page ไม่มีค่าอะไรส่งมา ให้เริ่มจาก 1 } // หาค่า $start โดยเอาทั้งหมดมาลบ(limitxจำนวนหน้า) $start = ( $total-( $limit*$page ) ); if ( $start < 0 ) { $start = 0; } if ( $start == 0 ) { $limit = ( $total%$limit ); if ( $limit == 0 ) { $limit = '50'; } // $start = 0 ก็คือข้อมูลหมดแล้ว คุณอาจส่งค่ากลับไปยังหน้าเพจจากตรงนี้ก็ได้ กรณีทำแบบหน้า php กับหน้าแสดงผลคนละหน้ากัน ตัวอย่าง.. $_GET['page'] = 0;// ในหน้าแสดงผลหรือหน้าที่รับค่าจาก $_GET นี้ได้ ก็ทำการเช็คว่าถ้า $_GET['page'] == 0 ให้ยกเลิกการแสดงปุ่มแบ่งหน้า เพราะข้อมูลเก่าๆแสดงหมดเกลี้ยงแล้ว } // เขียน sql ใหม่ตามเงื่อนไขเดิมที่ใช้ใน total (ถ้ามี) $sql = "select * from table where status = 'on'"; // เพิ่มคำสั่ง limit เข้าไป $sql .= " limit $start, $limit"; $result = mysql_query( $sql );