在 PHP 中,解決倒序分頁(yè)重復(fù)問題的一種常用方法是使用 SQL 語(yǔ)句的 LIMIT
和 ORDER BY
子句配合使用。
假設(shè)你有一個(gè)數(shù)據(jù)庫(kù)表格 posts
,其中包含了一些文章,每個(gè)文章都有一個(gè)自增的 id
字段。
要實(shí)現(xiàn)倒序分頁(yè),首先需要根據(jù) id
字段進(jìn)行倒序排序,然后使用 LIMIT
子句指定每頁(yè)顯示的記錄數(shù)和偏移量。
下面是一個(gè)示例代碼:
// 每頁(yè)顯示的記錄數(shù)
$limit = 10;
// 當(dāng)前頁(yè)碼
$page = isset($_GET['page']) ? $_GET['page'] : 1;
// 計(jì)算偏移量
$offset = ($page - 1) * $limit;
// 查詢文章數(shù)據(jù)
$query = "SELECT * FROM posts ORDER BY id DESC LIMIT $limit OFFSET $offset";
$result = mysqli_query($conn, $query);
// 輸出文章數(shù)據(jù)
while ($row = mysqli_fetch_assoc($result)) {
// 輸出文章內(nèi)容
echo $row['content'];
}
// 輸出分頁(yè)鏈接
$query = "SELECT COUNT(*) as total FROM posts";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
$total_pages = ceil($row['total'] / $limit);
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
在上面的示例代碼中,首先通過(guò) LIMIT
和 OFFSET
子句實(shí)現(xiàn)了倒序分頁(yè)查詢,然后計(jì)算總頁(yè)數(shù),并輸出了分頁(yè)鏈接。
這樣就可以實(shí)現(xiàn)倒序分頁(yè),并且避免了重復(fù)數(shù)據(jù)的問題。