MySQLi এর সাথে Pagination

মাইএসকিউএল আই (MySQLi) - Database Tutorials

339

১. Pagination কী?

Pagination হলো একটি প্রক্রিয়া যেখানে ডেটা দীর্ঘ তালিকা থেকে বিভিন্ন পৃষ্ঠায় ভাগ করা হয়, যাতে ব্যবহারকারী সহজে তথ্য দেখেতে পারে। এটি বিশেষভাবে ওয়েব অ্যাপ্লিকেশনগুলোতে ব্যবহৃত হয়, যেখানে বড় পরিমাণ ডেটা একটি পৃষ্ঠায় দেখানো সম্ভব হয় না। প্রতিটি পৃষ্ঠায় সীমিত সংখ্যক রেকর্ড দেখানো হয় এবং পরবর্তী বা পূর্ববর্তী পৃষ্ঠায় যাওয়ার জন্য লিঙ্ক দেওয়া হয়।

MySQLi ব্যবহার করে Pagination বাস্তবায়ন করা খুবই সহজ এবং কার্যকরী। এখানে, আমরা একটি সিম্পল উদাহরণের মাধ্যমে Pagination কিভাবে ব্যবহার করতে হয় তা দেখাবো।


২. Pagination এর প্রক্রিয়া

Pagination বাস্তবায়নের জন্য প্রথমে আমাদের দুটি কাজ করতে হবে:

  1. ডেটাবেজ থেকে ডেটার মোট সংখ্যা বের করা (যাতে আমরা জানি মোট কত পৃষ্ঠা থাকবে)।
  2. ডেটা ফেচ করা নির্দিষ্ট পৃষ্ঠার জন্য (যতটুকু রেকর্ড বর্তমান পৃষ্ঠায় দেখানো হবে)।

৩. MySQLi দিয়ে Pagination কিভাবে কার্যকরী করা যায়

৩.১ ডেটাবেজে টেবিল তৈরি করা

ধরা যাক আমাদের একটি users টেবিল রয়েছে, যেখানে ইউজারদের তথ্য আছে।

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

এখন, আমরা কিছু উদাহরণ ডেটা ইনসার্ট করব।

INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
INSERT INTO users (name, email) VALUES ('Jane Smith', 'jane@example.com');
INSERT INTO users (name, email) VALUES ('Bob Johnson', 'bob@example.com');
-- আরও ডেটা ইনসার্ট করুন, যতটুকু ডেটা প্রয়োজন

৩.২ Pagination লজিক তৈরি করা

পেজিনেশন কার্যকরী করতে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করতে হবে:

  1. পেজ নাম্বার ও লিমিট নির্ধারণ করা
  2. ডেটা ফেচ করা নির্দিষ্ট পৃষ্ঠার জন্য।
  3. কুল পেজ গণনা করা
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";

// সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);

// পেজ নাম্বার এবং প্রতি পৃষ্ঠায় কত রেকর্ড হবে তা নির্ধারণ করা
$records_per_page = 5;
$page = isset($_GET['page']) ? $_GET['page'] : 1;  // যদি পেজ নেই তাহলে ডিফল্ট ১ পেজ
$start_from = ($page - 1) * $records_per_page;

// ইউজারের জন্য রেকর্ড ফেচ করা
$sql = "SELECT id, name, email FROM users LIMIT $start_from, $records_per_page";
$result = $conn->query($sql);

// রেকর্ডের সংখ্যা চেক করা এবং পৃষ্ঠাগুলোর লিস্ট তৈরি করা
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
    }
} else {
    echo "No records found!";
}

// কুল রেকর্ড গোনার জন্য কুয়েরি
$sql_total = "SELECT COUNT(id) AS total FROM users";
$result_total = $conn->query($sql_total);
$row_total = $result_total->fetch_assoc();
$total_records = $row_total['total'];
$total_pages = ceil($total_records / $records_per_page);  // মোট পৃষ্ঠার সংখ্যা

// Pagination লিঙ্ক তৈরি করা
for ($i = 1; $i <= $total_pages; $i++) {
    echo "<a href='?page=" . $i . "'>Page " . $i . "</a> ";
}

// সংযোগ বন্ধ করা
$conn->close();

৪. কোডের বিশ্লেষণ

  • $page: এই ভেরিয়েবলটি বর্তমান পৃষ্ঠার নাম্বার ধারণ করে। এটি URL এর মাধ্যমে পাঠানো হয় (?page=1 ইত্যাদি)।
  • $start_from: এটি গণনা করা হয়, যাতে ডেটা সঠিকভাবে পৃষ্ঠায় বিভক্ত হয়। এটি প্রতি পৃষ্ঠায় প্রদর্শিত রেকর্ডের পরিমাণের উপর নির্ভর করে।
  • $records_per_page: প্রতি পৃষ্ঠায় কত রেকর্ড প্রদর্শিত হবে তা নির্ধারণ করে।
  • LIMIT: MySQLi এর LIMIT কুয়েরি ক্লজ ব্যবহার করে নির্দিষ্ট পৃষ্ঠার জন্য রেকর্ড নিয়ে আসা হয়। যেমন, প্রথম পৃষ্ঠার জন্য LIMIT 0, 5, দ্বিতীয় পৃষ্ঠার জন্য LIMIT 5, 5 ইত্যাদি।
  • $total_records: টেবিলের মোট রেকর্ড গোনা হয়, যাতে মোট পৃষ্ঠার সংখ্যা নির্ধারণ করা যায়।
  • $total_pages: এটি মোট পৃষ্ঠার সংখ্যা নির্ধারণ করে, যা ceil($total_records / $records_per_page) এর মাধ্যমে করা হয়।

৫. Pagination লিঙ্ক তৈরি করা

Pagination লিঙ্কগুলো ব্যবহারকারীকে বিভিন্ন পৃষ্ঠায় নিয়ে যেতে সাহায্য করবে। আমরা for লুপের মাধ্যমে লিঙ্কগুলো তৈরি করি এবং তাদের মধ্যে ক্লিক করে ব্যবহারকারী পরবর্তী পৃষ্ঠায় যেতে পারবেন।


MySQLi ব্যবহার করে Pagination একটি কার্যকরী পদ্ধতি, যা বড় ডেটাবেস থেকে ডেটা দেখতে সহজ করে তোলে। ডেটাবেজের সঠিক ব্যবস্থাপনা, নির্দিষ্ট পরিমাণ রেকর্ড প্রতি পৃষ্ঠায় দেখানো এবং পেজ লিঙ্ক তৈরি করার মাধ্যমে ব্যবহারকারীর অভিজ্ঞতা উন্নত করা যায়। MySQLi এর LIMIT ক্লজ এবং Pagination লজিক ব্যবহার করে খুব সহজেই Pagination বাস্তবায়ন করা সম্ভব।

Content added By

Pagination (পেজিনেশন) হল একটি কৌশল যা ওয়েব অ্যাপ্লিকেশনে বড় ডাটাবেস থেকে ডেটা দেখানোর জন্য ব্যবহৃত হয়। সাধারণত, পেজিনেশন ব্যবহার করে একটি নির্দিষ্ট সংখ্যক রেকর্ড একবারে দেখানো হয় এবং ইউজার সহজেই পরবর্তী বা পূর্ববর্তী পৃষ্ঠাগুলিতে নেভিগেট করতে পারেন। MySQLi ব্যবহার করে পেজিনেশন তৈরি করতে হলে, আপনাকে ডাটাবেসের কুয়েরি প্রক্রিয়াকে এমনভাবে ডিজাইন করতে হবে যাতে শুধুমাত্র নির্দিষ্ট সংখ্যক রেকর্ড একসাথে লোড হয়, যা একটি পেজে দেখানো যাবে।


Pagination এর মূল ধারণা

Pagination এর মাধ্যমে, একবারে পুরো ডাটাবেস থেকে সমস্ত রেকর্ড লোড না করে, একটি নির্দিষ্ট সংখ্যক রেকর্ড লোড করা হয়। এটি ইউজারের জন্য তথ্যের লোডিং গতি উন্নত করে এবং সার্ভার ও নেটওয়ার্কের উপর লোড কমায়।

Pagination সাধারণত তিনটি প্রধান অংশে বিভক্ত:

  1. Limit: প্রতিটি পেজে কতগুলো রেকর্ড দেখানো হবে, তা নির্ধারণ করা।
  2. Offset: নির্ধারণ করে কোন রেকর্ড থেকে পেজিং শুরু হবে।
  3. Page Number: কোন পেজে আছেন, তা ট্র্যাক করা।

MySQLi ব্যবহার করে Pagination Implement করা

MySQLi ব্যবহার করে পেজিনেশন করার জন্য আপনাকে প্রথমে LIMIT এবং OFFSET SQL কুয়েরি প্যারামিটারগুলো ব্যবহার করতে হবে। উদাহরণস্বরূপ:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database_name");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$records_per_page = 10;  // প্রতি পেজে ১০টি রেকর্ড
$page_number = isset($_GET['page']) ? $_GET['page'] : 1;  // URL থেকে পেজ নম্বর নিন
$offset = ($page_number - 1) * $records_per_page;  // কোন রেকর্ড থেকে শুরু হবে

$query = "SELECT * FROM users LIMIT $records_per_page OFFSET $offset";  // LIMIT এবং OFFSET ব্যবহার

$result = $mysqli->query($query);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "User: " . $row['name'] . "<br>";
    }
} else {
    echo "No records found.";
}

// Pagination Links
$total_records_query = "SELECT COUNT(*) FROM users";  // মোট রেকর্ডের সংখ্যা জানুন
$total_records_result = $mysqli->query($total_records_query);
$total_records = $total_records_result->fetch_row()[0];
$total_pages = ceil($total_records / $records_per_page);  // মোট পেজের সংখ্যা

echo "<br>";
for ($i = 1; $i <= $total_pages; $i++) {
    echo "<a href='?page=$i'>$i</a> ";
}

$mysqli->close();
?>

Pagination Implementation এর বিস্তারিত

  1. Limit: LIMIT SQL কুয়েরি ব্যবহার করা হয় যা প্রতি পেজে কতগুলো রেকর্ড দেখানো হবে তা নির্ধারণ করে। উপরে দেওয়া উদাহরণে, প্রতি পেজে ১০টি রেকর্ড দেখানো হচ্ছে।
  2. Offset: OFFSET কুয়েরি ব্যবহার করা হয় যা নির্ধারণ করে পেজিং শুরু হবে কোথা থেকে। এটি মূলত ($page_number - 1) * $records_per_page এর মাধ্যমে হিসাব করা হয়, যেখানে $page_number হল বর্তমানে যে পেজে আছেন এবং $records_per_page হল প্রতি পেজে দেখানোর রেকর্ড সংখ্যা।
  3. Total Records and Total Pages: Pagination সঠিকভাবে কাজ করার জন্য, আপনাকে মোট রেকর্ডের সংখ্যা জানতে হবে। এটি COUNT(*) কুয়েরি ব্যবহার করে পাওয়া যায়। তারপরে মোট পেজের সংখ্যা নির্ধারণ করা হয় ceil($total_records / $records_per_page) এর মাধ্যমে।
  4. Pagination Links: পরবর্তী এবং পূর্ববর্তী পৃষ্ঠায় নেভিগেট করার জন্য পেজ নম্বরের লিঙ্কগুলো তৈরি করা হয়। প্রতিটি পেজে ক্লিক করলে ইউজার ঐ পেজে চলে যেতে পারেন।

সারাংশ

MySQLi ব্যবহার করে পেজিনেশন বাস্তবায়ন করার জন্য, LIMIT এবং OFFSET SQL কুয়েরি ব্যবহার করে নির্দিষ্ট সংখ্যক রেকর্ড প্রদর্শন করা হয়। এর মাধ্যমে ইউজার একটি নির্দিষ্ট পরিমাণ ডেটা দেখতে পান, যা তাদের সার্চ অথবা ব্রাউজিং অভিজ্ঞতা উন্নত করে। Pagination ইমপ্লিমেন্টেশনটি ওয়েব অ্যাপ্লিকেশনের পারফরম্যান্স বাড়ায় এবং ডেটাবেসের অতিরিক্ত লোড কমাতে সাহায্য করে।

Content added By

ডাইনামিক পেজিনেশন হল একটি পদ্ধতি যার মাধ্যমে বড় ডেটা সেটকে ছোট ছোট অংশে ভাগ করা হয় এবং প্রতিটি অংশ বা পেজে নির্দিষ্ট সংখ্যক রেকর্ড প্রদর্শিত হয়। MySQLi ব্যবহার করে ডাইনামিক পেজিনেশন তৈরি করা অনেক সহজ এবং এটি ইউজার এক্সপিরিয়েন্স উন্নত করতে সাহায্য করে। এখানে আমি MySQLi দিয়ে ডাইনামিক পেজিনেশন তৈরি করার প্রক্রিয়া বর্ণনা করব।


পেজিনেশন তৈরির প্রক্রিয়া

ডাইনামিক পেজিনেশন তৈরির জন্য প্রথমে আপনাকে কিছু মৌলিক উপাদান তৈরি করতে হবে, যেমন:

  1. ডেটাবেস থেকে ডেটা ফেচ করা
  2. টোটাল পেজেস হিসাব করা
  3. পেজিং লিঙ্ক তৈরি করা
  4. পেজিনেশন প্রক্রিয়া কার্যকরী করা

এখন প্রতিটি ধাপ বিশদভাবে আলোচনা করা হবে।


১. ডেটাবেস থেকে ডেটা ফেচ করা

প্রথমে আপনি যে টেবিল থেকে ডেটা ফেচ করতে চান, সে টেবিলের সমস্ত রেকর্ড বের করতে হবে। এক্ষেত্রে, LIMIT এবং OFFSET ব্যবহার করা হয়, যা আপনাকে নির্দিষ্ট রেকর্ড পরিমাণে ডেটা আনার সুযোগ দেয়।

<?php
// ডেটাবেস কনেকশন স্থাপন
$connection = mysqli_connect('localhost', 'root', '', 'your_database');

// পেজ নাম্বার এবং রেকর্ড পার পেজ নির্ধারণ
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$records_per_page = 10;  // প্রতিটি পেজে 10 রেকর্ড

$offset = ($page - 1) * $records_per_page;  // শুরুর রেকর্ডের অবস্থান

// ডেটা ফেচ করা
$query = "SELECT * FROM your_table LIMIT $offset, $records_per_page";
$result = mysqli_query($connection, $query);
?>

এখানে $_GET['page'] দ্বারা আপনি URL প্যারামিটার থেকে পেজ নম্বর গ্রহণ করছেন, এবং LIMITOFFSET দ্বারা আপনি ডেটাবেস থেকে নির্দিষ্ট পরিমাণ ডেটা এনে থাকছেন।


২. টোটাল পেজেস হিসাব করা

ডাইনামিক পেজিনেশনের জন্য মোট পেজ সংখ্যা হিসাব করতে হবে। এটি করতে হলে, প্রথমে টেবিলের মোট রেকর্ড সংখ্যা বের করতে হবে এবং তারপর রেকর্ড পার পেজ দ্বারা ভাগ করে মোট পেজের সংখ্যা নির্ধারণ করতে হবে।

<?php
// মোট রেকর্ড সংখ্যা বের করা
$query_total = "SELECT COUNT(*) FROM your_table";
$result_total = mysqli_query($connection, $query_total);
$row = mysqli_fetch_row($result_total);
$total_records = $row[0];

// মোট পেজ সংখ্যা হিসাব করা
$total_pages = ceil($total_records / $records_per_page);
?>

এখানে, COUNT(*) ব্যবহার করে মোট রেকর্ড সংখ্যা বের করা হচ্ছে এবং ceil() ফাংশন ব্যবহার করে মোট পেজের সংখ্যা হিসাব করা হচ্ছে।


৩. পেজিং লিঙ্ক তৈরি করা

একবার মোট পেজ সংখ্যা নির্ধারণ হলে, পরবর্তী পদক্ষেপ হলো পেজিং লিঙ্ক তৈরি করা, যাতে ইউজার বিভিন্ন পেজে নেভিগেট করতে পারে।

<?php
// পেজিং লিঙ্ক তৈরি করা
echo '<div class="pagination">';
for ($i = 1; $i <= $total_pages; $i++) {
    if ($i == $page) {
        echo '<span class="current-page">' . $i . '</span>';
    } else {
        echo '<a href="?page=' . $i . '">' . $i . '</a>';
    }
}
echo '</div>';
?>

এখানে, প্রতিটি পেজ নম্বর একটি লিঙ্কের মধ্যে রয়েছে, এবং বর্তমানে যে পেজটি চালু আছে, সেটি আলাদা করে প্রদর্শিত হচ্ছে।


৪. পেজিনেশন প্রক্রিয়া কার্যকরী করা

ডেটাবেস থেকে ডেটা ফেচ করার পর এবং পেজিং লিঙ্ক তৈরি করার পর, এখন সবকিছু একত্রিত করতে হবে।

<?php
// ডেটাবেস কনেকশন
$connection = mysqli_connect('localhost', 'root', '', 'your_database');

// পেজ নম্বর এবং রেকর্ড পার পেজ সেট করা
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$records_per_page = 10;
$offset = ($page - 1) * $records_per_page;

// ডেটা ফেচ করা
$query = "SELECT * FROM your_table LIMIT $offset, $records_per_page";
$result = mysqli_query($connection, $query);

// রেকর্ড দেখানো
while ($row = mysqli_fetch_assoc($result)) {
    echo "<div>" . $row['column_name'] . "</div>";
}

// মোট রেকর্ড সংখ্যা এবং পেজ সংখ্যা বের করা
$query_total = "SELECT COUNT(*) FROM your_table";
$result_total = mysqli_query($connection, $query_total);
$row = mysqli_fetch_row($result_total);
$total_records = $row[0];
$total_pages = ceil($total_records / $records_per_page);

// পেজিং লিঙ্ক তৈরি করা
echo '<div class="pagination">';
for ($i = 1; $i <= $total_pages; $i++) {
    if ($i == $page) {
        echo '<span class="current-page">' . $i . '</span>';
    } else {
        echo '<a href="?page=' . $i . '">' . $i . '</a>';
    }
}
echo '</div>';
?>

এখন আপনার ডাইনামিক পেজিনেশন সম্পূর্ণ প্রস্তুত। প্রতিটি পেজে ১০টি রেকর্ড প্রদর্শিত হবে এবং ইউজার পেজ নম্বর অনুসারে নেভিগেট করতে পারবেন।


এইভাবে, MySQLi ব্যবহার করে আপনি সহজেই ডাইনামিক পেজিনেশন তৈরি করতে পারেন। এর মাধ্যমে বড় ডেটা সেটগুলোকে ছোট ছোট পেজে ভাগ করা সম্ভব, যা ইউজারদের জন্য আরও দ্রুত ও সহজে তথ্য অ্যাক্সেস করা সম্ভব করে।

Content added By

MySQLi-তে LIMIT এবং OFFSET কুয়েরি লেখার একটি গুরুত্বপূর্ণ পদ্ধতি, বিশেষ করে যখন বড় ডাটাবেস থেকে নির্দিষ্ট পরিমাণ ডাটা ফেচ করতে হয়। LIMIT এবং OFFSET এর ব্যবহার পারফরম্যান্স অপটিমাইজেশনে সহায়ক, কারণ এগুলি ডাটাবেসে অপ্রয়োজনীয় ডাটা রিটার্ন করার পরিমাণ কমিয়ে দেয়।


LIMIT কী?

LIMIT একটি SQL কুয়েরি ক্লজ, যা নির্দিষ্ট সংখ্যক রেকর্ড ফিরিয়ে আনতে ব্যবহৃত হয়। এর মাধ্যমে, একাধিক রেকর্ড থেকে শুধুমাত্র কিছু সংখ্যক রেকর্ড নির্বাচন করা হয়। এটি ডাটাবেসের লোড কমাতে সহায়তা করে, বিশেষ করে যখন খুব বড় ডাটাবেসের মধ্যে থেকে ছোট ডাটা সেট প্রয়োজন হয়।

উদাহরণ:

<?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$query = "SELECT name, email FROM users LIMIT 5";
$result = $mysqli->query($query);

while ($row = $result->fetch_assoc()) {
    echo "Name: " . $row['name'] . " - Email: " . $row['email'] . "<br>";
}

$mysqli->close();
?>

এখানে, LIMIT 5 ব্যবহার করা হয়েছে, যা শুধুমাত্র প্রথম ৫টি রেকর্ড রিটার্ন করবে।


OFFSET কী?

OFFSET সাধারণত LIMIT এর সাথে ব্যবহৃত হয়। এটি নির্দিষ্ট করে যে, কুয়েরি থেকে কতগুলো রেকর্ড স্কিপ (উল্লেখযোগ্যভাবে বাদ) করতে হবে। যখন ডাটা পেজিনেশন (pagination) প্রয়োগ করতে হয়, তখন OFFSET অনেক সহায়ক হতে পারে। এটি সাধারণত LIMIT এর পর ব্যবহৃত হয়, এবং এটি যে রেকর্ড থেকে ডাটা নিতে শুরু করবে তা নির্ধারণ করে।

উদাহরণ:

<?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$query = "SELECT name, email FROM users LIMIT 5 OFFSET 10";
$result = $mysqli->query($query);

while ($row = $result->fetch_assoc()) {
    echo "Name: " . $row['name'] . " - Email: " . $row['email'] . "<br>";
}

$mysqli->close();
?>

এখানে, LIMIT 5 OFFSET 10 মানে হল প্রথম ১০টি রেকর্ড স্কিপ করা হবে, এবং তারপর পরবর্তী ৫টি রেকর্ড রিটার্ন হবে। এটি সাধারণত পেজিনেশন ব্যবস্থায় ব্যবহার হয়।


LIMIT এবং OFFSET একসঙ্গে ব্যবহার করা

পেজিনেশন ব্যবস্থায় একসাথে LIMIT এবং OFFSET ব্যবহার করা হয় যাতে ইউজারের জন্য নির্দিষ্ট সংখ্যক রেকর্ড প্রদর্শিত হয় এবং পরবর্তী বা পূর্ববর্তী পৃষ্ঠায় সহজে যাওয়ার ব্যবস্থা থাকে। উদাহরণস্বরূপ, যদি আপনি ১০টি রেকর্ড প্রতি পেজে দেখাতে চান, তবে প্রথম পেজের জন্য LIMIT 10 OFFSET 0 এবং দ্বিতীয় পেজের জন্য LIMIT 10 OFFSET 10 হবে।

উদাহরণ:

<?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$page = 2; // দ্বিতীয় পেজ
$records_per_page = 10;
$offset = ($page - 1) * $records_per_page;

$query = "SELECT name, email FROM users LIMIT $records_per_page OFFSET $offset";
$result = $mysqli->query($query);

while ($row = $result->fetch_assoc()) {
    echo "Name: " . $row['name'] . " - Email: " . $row['email'] . "<br>";
}

$mysqli->close();
?>

এখানে, প্রথম পেজের জন্য OFFSET 0 হবে এবং দ্বিতীয় পেজের জন্য OFFSET 10 হবে, যা পরবর্তী ১০টি রেকর্ড ফেচ করবে।


LIMIT এবং OFFSET এর ব্যবহারকারী সুবিধা

  • পারফরম্যান্স উন্নতি: বড় ডাটাবেস থেকে অপ্রয়োজনীয় ডাটা না ফেচ করে নির্দিষ্ট সংখ্যক রেকর্ড ফেচ করা যায়, ফলে সার্ভারের লোড কমে।
  • পেজিনেশন: ব্যবহারকারীকে ছোট ছোট অংশে ডাটা দেখানোর জন্য পেজিনেশন প্রয়োগ করা সহজ হয়।
  • ডাটা ফিল্টারিং: আপনি যদি চাইলে বড় ডাটাবেস থেকে নির্দিষ্ট রেঞ্জের ডাটা একসঙ্গে দেখতে পারেন।

LIMIT এবং OFFSET একসঙ্গে ব্যবহারের মাধ্যমে MySQLi-তে ডাটাবেসের পারফরম্যান্স এবং ইউজার ইন্টারফেসের সুবিধা বাড়ানো সম্ভব।

Content added By

Pagination, বা পেজিনেশন, হলো একটি কৌশল যা ডেটাবেস থেকে বড় আকারের ডেটা সেটকে ছোট ছোট অংশে ভাগ করে প্রদর্শন করতে ব্যবহৃত হয়। যখন অনেক ডেটা একসাথে প্রদর্শিত হয়, তখন এটি সার্ভারের উপর চাপ সৃষ্টি করতে পারে এবং কর্মক্ষমতা কমিয়ে দেয়। MySQLi তে Pagination ব্যবহারের ক্ষেত্রে সঠিক কৌশল ব্যবহার করলে কর্মক্ষমতা অনেকটা বৃদ্ধি করা সম্ভব।

Pagination এর গুরুত্ব

যখন আপনি একটি ওয়েব পেজে অনেক ডেটা (যেমন: ১০,০০০ বা ১০০,০০০ রেকর্ড) প্রদর্শন করতে চান, তখন পুরো ডেটাসেট একসাথে লোড করলে তা অ্যাপ্লিকেশনের পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে। Pagination ব্যবহারের মাধ্যমে আপনি শুধুমাত্র একটি নির্দিষ্ট অংশ (পেজ) লোড করতে পারেন, যা পেজের লোড সময় কমিয়ে দেয় এবং সার্ভারের রিসোর্স সাশ্রয়ী রাখে।

MySQLi তে Pagination Performance Optimization কৌশল

১. OFFSET এবং LIMIT ব্যবহার

OFFSET এবং LIMIT MySQL-এর গুরুত্বপূর্ণ পেজিনেশন কিওয়ার্ড যা ডেটাবেসের কোনো নির্দিষ্ট অংশ (সারিতে) থেকে ডেটা ফিরিয়ে আনতে ব্যবহৃত হয়। কিন্তু এটি বড় ডেটাসেটে কার্যকরী নয়, কারণ OFFSET অনেক বড় হলে ডেটাবেসকে প্রথম কয়েক হাজার রেকর্ড স্কিপ করতে হয়, যা সময়সাপেক্ষ হতে পারে। এখানে কিভাবে এটি ব্যবহার করতে হয় তা দেখানো হলো:

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1; // বর্তমান পেজ
$limit = 10; // প্রতি পেজে রেকর্ড সংখ্যা
$offset = ($page - 1) * $limit; // অবজেক্টের স্টার্টিং পয়েন্ট

$query = "SELECT * FROM users LIMIT $limit OFFSET $offset";
$result = $mysqli->query($query);

এখানে $page প্যারামিটার অনুযায়ী ডেটাবেস থেকে নির্দিষ্ট পেজের ডেটা আনা হয়।

২. Indexed Column ব্যবহার

যত দ্রুত আপনি LIMITOFFSET ব্যবহার করবেন, তত বেশি গুরুত্বপূর্ণ হয়ে ওঠে ডেটাবেসের ইনডেক্স। pagination এর ক্ষেত্রে আপনার ডেটাবেস টেবিলে এমন কলাম ব্যবহার করুন যা ইনডেক্সড (যেমন: id বা timestamp)। এটি ডেটাবেসকে ডেটা খুঁজে পেতে সহায়তা করে, বিশেষ করে যখন আপনি বড় ডেটাসেট নিয়ে কাজ করছেন।

CREATE INDEX idx_users_id ON users(id);

যদি আপনি ইনডেক্সড কলাম ব্যবহার করেন, তাহলে MySQL সার্ভার খুব দ্রুত নির্দিষ্ট রেকর্ডে পৌঁছাতে পারবে এবং OFFSET এর মান কমাতে পারবে।

৩. "Seek Method" ব্যবহার

এটি একটি উন্নত কৌশল যা বিশেষত বড় ডেটাসেটের জন্য কার্যকর। সাধারণ OFFSET এর পরিবর্তে, আপনি শেষ পেজের সর্বশেষ রেকর্ডের ID বা টেম্পোরাল ইনফরমেশন (যেমন: timestamp) ব্যবহার করে পরবর্তী পেজের ডেটা রিটার্ন করতে পারেন। এটি এক ধরণের "seek" মেথড হিসেবে কাজ করে, যেখানে MySQL একটি নির্দিষ্ট পয়েন্ট থেকে ডেটা পড়তে শুরু করে।

এখানে কিভাবে কাজ করে তা দেখানো হলো:

$last_id = isset($_GET['last_id']) ? (int)$_GET['last_id'] : 0;
$limit = 10;

$query = "SELECT * FROM users WHERE id > $last_id ORDER BY id ASC LIMIT $limit";
$result = $mysqli->query($query);

এখানে, প্রতি পেজের শেষে শেষ রেকর্ডের id সংগ্রহ করা হয় এবং পরবর্তী পেজের জন্য id > $last_id শর্ত ব্যবহার করা হয়।

৪. Total Count Query কমানো

প্রতিটি পেজের জন্য আপনি মোট রেকর্ডের সংখ্যা (total count) জানতে চাইবেন। কিন্তু বড় ডেটাবেসে COUNT(*) কুয়েরি খুব ধীর গতিতে কাজ করতে পারে। তাই একাধিক পেজের জন্য বারবার COUNT(*) কুয়েরি চালানো থেকে বিরত থাকুন। পরিবর্তে, আপনি প্রাথমিকভাবে মোট রেকর্ড সংখ্যা একটি ক্যাশে বা পৃথক কুয়েরিতে সংগ্রহ করে রাখতে পারেন এবং পরে তা ব্যবহার করতে পারেন।

// মোট রেকর্ডের সংখ্যা কেবল প্রথমবার ক্যাশে নিয়ে আসুন
$totalQuery = "SELECT COUNT(*) AS total FROM users";
$totalResult = $mysqli->query($totalQuery);
$totalCount = $totalResult->fetch_assoc()['total'];

৫. Query Caching ব্যবহার

MySQLi তে Query Caching ব্যবহার করলে পুনরাবৃত্তি প্রশ্নগুলোর জন্য দ্রুত ফলাফল পাওয়া যায়। Caching এর মাধ্যমে পেজিনেশন কুয়েরি বারবার চালানোর পরিবর্তে, তা একবার ফলাফল ক্যাশে সংরক্ষণ করে রাখা হয়।

$mysqli->query("SET SESSION query_cache_type = 1");
$mysqli->query("SET SESSION query_cache_size = 1000000"); // ক্যাশে সাইজ কনফিগার করুন

সারাংশ

MySQLi তে Pagination ব্যবহারের সময় পারফরম্যান্স অপটিমাইজ করার জন্য বেশ কিছু কৌশল রয়েছে, যেমন ইনডেক্সড কলাম ব্যবহার, OFFSET ও LIMIT এর পরিবর্তে "seek method" ব্যবহার, এবং total count query কমানোর মতো কৌশল। এগুলি ব্যবহার করে আপনি বড় ডেটাসেটের পেজিনেশনকে আরো দ্রুত এবং কার্যকরী করতে পারেন, যা সার্ভারের উপর চাপ কমায় এবং ওয়েব অ্যাপ্লিকেশনের কর্মক্ষমতা উন্নত করে।

Content added By
Promotion

Are you sure to start over?

Loading...