0 က်ဘ်အပလီကေးရှင်းများဖွင့်လှစ်သည့်အခါ Pagination Query သည်အထူးသဖြင့် backend စီမံခန့်ခွဲမှုစနစ်များစသည့်ပုံစံများ, MySQL သည် ppostatement :: Php PDO ရှိ Raveount () rowcount () rowcount () method သည်ရလဒ်အစုံရရှိရန်အတွက် PDCOUTE :: Rowcount () နည်းစနစ်ကိုရယူရန်အသုံးပြုနိုင်သည်။ အကယ်. နှစ်ခုကိုစနစ်တကျပေါင်းစပ်ပါက၎င်းသည်ကုဒ်၏ဖတ်နိုင်မှုကိုတိုးတက်စေရုံသာမက,
ရိုးရာ Pagination Query တွင်အဆင့်နှစ်ဆင့်ရှိသည်။
လက်ရှိစာမျက်နှာ၏အချက်အလက်များကိုရယူပါ။ အကန့်အသတ်ဖြင့်သာသုံးပါ, ရေတွက်ပါ ။
စုစုပေါင်းမှတ်တမ်းများကိုရယူပါ။ စားပွဲ၌ Select Count (*) ကို သုံးပါ။
ဤနည်းလမ်းသည်ပုံမှန်ဖြစ်လေ့ဖြစ်သော်လည်းဒေတာဇယားသည်ကြီးမားသည့်အခါ အရေအတွက် အလွန်များပြားသည်, အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်တွင်အလွန်မြင့်မားနိုင်သည်။
PDostatement :: Rowcount () ကို ရွေးချယ်ခြင်း အတွက်ကိုက်ညီမှုမရှိပါ။ စုစုပေါင်းမှတ်တမ်းများကိုရေတွက်ရန်အသုံးပြုသည်မဟုတ်သော်လည်းဤအချက်ကိုထုတ်ပြန်ကြေငြာချက်မှသက်ရောက်မှုရှိသောအတန်းအရေအတွက်ကိုပြန်ပို့ရန်။ Select Select ကို အသုံးပြုသောအခါအချို့သောဒေတာဘေ့စ ် (ဥပမာ Postgresql) သည်မေးခွန်းများအတွက်အတန်းအရေအတွက်ကိုပြန်ပို့ပေးသည့်အခါ,
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass', [
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
]);
Rowcount () သည် စုစုပေါင်းကိုအပြည့်အဝမမှီခိုနိုင်သော်လည်းအချို့သောအခြေအနေများတွင်အကာအကွယ်ပေးသည့်အတွေ့အကြုံများကိုပိုမိုကောင်းမွန်စေရန် အကန့်အသတ် နှင့်အသိဉာဏ်ယုတ္တိဗေဒကိုပေါင်းစပ်နိုင်သည်။ ဥပမာအားဖြင့်, ကျွန်ုပ်တို့သည်နောက်စာမျက်နှာရှိမရှိမရှိကိုဆုံးဖြတ်ရန်စာမျက်နှာတစ်ခု၏အချက်အလက်များကိုကျွန်ုပ်တို့မေးမြန်းနိုင်သည် ။
<?php
$pdo = new PDO('mysql:host=localhost;dbname=exampledb', 'user', 'password', [
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
$page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1;
$pageSize = 10;
$offset = ($page - 1) * $pageSize;
$limitPlusOne = $pageSize + 1;
$sql = "SELECT * FROM articles ORDER BY created_at DESC LIMIT :offset, :limit";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':limit', $limitPlusOne, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
$hasNextPage = false;
if (count($results) > $pageSize) {
$hasNextPage = true;
array_pop($results); // ပိုလျှံဖယ်ရှားပါ
}
// ဒေတာ rendering
foreach ($results as $article) {
echo "<h2>{$article['title']}</h2>";
echo "<p>{$article['summary']}</p>";
echo "<a href=\"https://gitbox.net/articles/{$article['id']}\">စာသားအပြည့်အစုံကိုဖတ်ပါ</a><hr>";
}
if ($hasNextPage) {
echo "<a href=\"https://gitbox.net/list?page=" . ($page + 1) . "\">နောက်စာမျက်နှာ</a>";
}
?>
ရေတွက် (*) မေးမြန်းချက်များကိုရှောင်ရှားခြင်းနှင့်ဒေတာဘေ့စ်ဖိအားကိုလျှော့ချပါ။
နောက်စာမျက်နှာတစ်ခုရှိမရှိဆုံးဖြတ်ရန် ကန့်သတ် n + 1 ကို သုံးပါ။
အချက်အလက်အပြောင်းအလဲအတွက်ယုတ္တိဗေဒဆိုင်ရာယုတ္တိဗေဒသည်စုံစုံရှိပြီးစွမ်းဆောင်ရည်ကောင်းသည်,
၎င်းသည်ကြီးမားသောဒေတာပမာဏနှင့်အနိမ့်အနိမ့်အတိမ်အနက်နှင့်အတူဖြစ်ရပ်များအတွက်အထူးသဖြင့်သင့်လျော်သည်။
အထက်ဖော်ပြပါနည်းလမ်းမှာထိရောက်သော်လည်းအခြေအနေများအားလုံးနှင့်မသက်ဆိုင်ပါ။ အကယ်. သင်၏စာမျက်နှာသည်စုစုပေါင်းစာမျက်နှာအရေအတွက်ရေတွက်ခြင်းကဲ့သို့သောသတင်းအချက်အလက်များကိုပြသရန်လိုအပ်ပါကစုစုပေါင်းစံချိန်တင်အရေအတွက်ကိုဖော်ပြရန်လိုအပ်ပါက အရေအတွက်ကို အသုံးပြုရန်မလွှဲမရှောင်သာဖြစ်သည်။
$totalCount = $pdo->query("SELECT COUNT(*) FROM articles")->fetchColumn();
$totalPages = ceil($totalCount / $pageSize);
အပေးအယူတစ်ခုအပေးအယူတစ်ခုမှာသတင်းအချက်အလက်စုစုပေါင်းကို cache လုပ်ရန်နှင့်အချိန်နှင့်တပြေးညီတွက်ချက်မှုများကိုအချိန်တိုင်းရှောင်ရှားရန်ပုံမှန်အားဖြင့်ပြန်လည်လန်းဆန်းစေရန်ဖြစ်သည်။
Paging Optimization လုပ်သည့်အခါ "အရွယ်အစားနှင့်ကိုက်ညီသော" အကောင်းဆုံးအလေ့အကျင့်မရှိပါ။ ကျိုးကြောင်းဆီလျော်သော ကန့်သတ်ချက် , Rowcount () နှင့်စီးပွားရေးလိုအပ်ချက်များသည်စွမ်းဆောင်ရည်မြင့်မားသောအစာအာဟာရရှာဖွေမှု၏သော့ချက်ဖြစ်သည်။ အကယ်. သင်သည်အလွန်အမင်းစွမ်းဆောင်ရည်ကိုလိုက်စားနေလျှင်ကြီးမားသောဒေတာအစုများအောက်တွင်ပိုမိုကောင်းမွန်သောမူလသော့များသို့မဟုတ် timestamps များအပေါ် အခြေခံ. "cursor-based pagination" ကိုစဉ်းစားနိုင်သည်။
ဤဆောင်းပါးတွင်မိတ်ဆက်ပေးသောအချက်များနှင့်မိတ်ဆက်ပေးသည့်အနေဖြင့်ကြည့်ရှုနိုင်သည့်အနေဖြင့်ကောင်းမွန်သောအသုံးပြုသူအတွေ့အကြုံနှင့်တုန့်တ်တိကျမှုအားထိန်းသိမ်းထားစဉ်ကြုံတွေ့ရသည့်အခြေအနေအများစုတွင်စျေးကြီးသော အရေအတွက် (*) မေးမြန်းချက်များကိုရှောင်ရှားနိုင်သည်။