在MySQL數(shù)據(jù)庫中,分表是一種常用的優(yōu)化手段。但如果數(shù)據(jù)量較大,單表查詢時(shí)可能會變得十分緩慢,而且需要耗費(fèi)大量的內(nèi)存和CPU資源。因此,在分表后,如何進(jìn)行分頁查詢也是我們需要考慮的問題。
首先,我們需要定義每一頁的大小,比如一頁顯示10條記錄。然后,我們需要確定當(dāng)前查詢的是第幾頁。有了這兩個(gè)基本信息,就可以使用LIMIT和OFFSET子句來查詢分頁數(shù)據(jù)。
SELECT * FROM 表名 limit 開始行, 每頁顯示的行數(shù);
LIMIT后面的第一個(gè)參數(shù)就是開始行數(shù),我們需要根據(jù)當(dāng)前頁數(shù)來計(jì)算出它的值。比如:如果當(dāng)前頁是第2頁,那么開始行數(shù)就是11。
$pagesize = 10;//每頁顯示的記錄數(shù) $page = isset($_GET['page']) ? intval($_GET['page']) : 1;//當(dāng)前頁數(shù) $start = ($page - 1) * $pagesize;//計(jì)算每頁的開始行數(shù) $sql = "SELECT * FROM 表名 LIMIT $start, $pagesize";
以上代碼中,$pagesize和$page分別是我們需要預(yù)先定義好的每頁記錄數(shù)和當(dāng)前頁數(shù)。$start則是根據(jù)當(dāng)前頁數(shù)計(jì)算出的開始行數(shù),最后將這些變量帶到SQL語句中進(jìn)行查詢。
當(dāng)然,我們還需要計(jì)算出共有多少頁。這里我們可以使用COUNT函數(shù)來獲取表中的總記錄數(shù),然后再根據(jù)每頁記錄數(shù)來計(jì)算頁數(shù)。
$sql_count = "SELECT COUNT(1) FROM 表名"; $total = $db->query($sql_count)->fetchColumn();//查詢總記錄數(shù) $total_page = ceil($total / $pagesize);//計(jì)算總頁數(shù)
以上代碼中,我們使用COUNT函數(shù)來查詢表中的記錄總數(shù),然后通過計(jì)算得出總頁數(shù)。由于有可能存在除不盡的情況,所以我們使用了上取整函數(shù)ceil()來計(jì)算總頁數(shù)。
最后,我們還需要在頁面上輸出分頁導(dǎo)航條。目前比較常用的方式是使用Bootstrap框架提供的分頁樣式。
<nav aria-label="Page navigation example"> <ul class="pagination"> <li class="page-item <?php if($page==1){echo 'disabled';} ?>"> <a class="page-link" href="index.php?page=<?php echo $page-1; ?>" aria-label="Previous"> <span aria-hidden="true">«</span> <span class="sr-only">Previous</span> </a> </li> <?php for($i=1;$i<=$total_page;$i++){ ?> <li class="page-item <?php if($page==$i){echo 'active';} ?>"> <a class="page-link" href="index.php?page=<?php echo $i; ?>"><?php echo $i; ?></a> </li> <?php } ?> <li class="page-item <?php if($page==$total_page){echo 'disabled';} ?>"> <a class="page-link" href="index.php?page=<?php echo $page+1; ?>" aria-label="Next"> <span aria-hidden="true">»</span> <span class="sr-only">Next</span> </a> </li> </ul> </nav>
以上代碼中,我們使用了Bootstrap提供的分頁樣式,并使用了PHP語言輸出了分頁導(dǎo)航條。需要注意的是,我們使用了PHP中的條件語句,在當(dāng)前頁是第一頁或最后一頁時(shí)禁用了相應(yīng)的導(dǎo)航鏈接。
通過上述的方式,我們就可以在MySQL分表后進(jìn)行分頁查詢并展示分頁導(dǎo)航條了。