Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL LIMIT, OFFSET का उपयोग करके पृष्ठ पर अंक लगाना

सबसे पहले, प्रत्येक पृष्ठ के लिए एक अलग सर्वर स्क्रिप्ट नहीं है, यह सिर्फ पागलपन है। अधिकांश एप्लिकेशन URL में पेजिनेशन पैरामीटर के उपयोग के माध्यम से पेजिनेशन लागू करते हैं। कुछ इस तरह:

http://yoursite.com/itempage.php?page=2

आप अनुरोधित पृष्ठ संख्या $_GET['page'] . के माध्यम से एक्सेस कर सकते हैं ।

यह आपके SQL फॉर्मूलेशन को वास्तव में आसान बनाता है:

// determine page number from $_GET
$page = 1;
if(!empty($_GET['page'])) {
    $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
    if(false === $page) {
        $page = 1;
    }
}

// set the number of items to display per page
$items_per_page = 4;

// build query
$offset = ($page - 1) * $items_per_page;
$sql = "SELECT * FROM menuitem LIMIT " . $offset . "," . $items_per_page;

तो उदाहरण के लिए यदि यहां इनपुट page=2 था , प्रति पृष्ठ 4 पंक्तियों के साथ, आपकी क्वेरी होगी"

SELECT * FROM menuitem LIMIT 4,4

तो यह पेजिनेशन की मूल समस्या है। अब, आपके पास अतिरिक्त आवश्यकता है कि आप पृष्ठों की कुल संख्या को समझना चाहते हैं (ताकि आप यह निर्धारित कर सकें कि "अगला पृष्ठ" दिखाया जाना चाहिए या यदि आप लिंक के माध्यम से पृष्ठ X तक सीधे पहुंच की अनुमति देना चाहते हैं)।

ऐसा करने के लिए, आपको तालिका में पंक्तियों की संख्या को समझना होगा।

अपने वास्तविक सीमित रिकॉर्ड सेट को वापस करने का प्रयास करने से पहले आप इसे डीबी कॉल के साथ आसानी से कर सकते हैं (मैं पहले कहता हूं क्योंकि आप स्पष्ट रूप से यह सत्यापित करना चाहते हैं कि अनुरोधित पृष्ठ मौजूद है)।

यह वास्तव में काफी सरल है:

$sql = "SELECT your_primary_key_field FROM menuitem";
$result = mysqli_query($con, $sql);
$row_count = mysqli_num_rows($result);
// free the result set as you don't need it anymore
mysqli_free_result($result);

$page_count = 0;
if (0 === $row_count) {  
    // maybe show some error since there is nothing in your table
} else {
   // determine page_count
   $page_count = (int)ceil($row_count / $items_per_page);
   // double check that request page is in range
   if($page > $page_count) {
        // error to user, maybe set page to 1
        $page = 1;
   }
}

// make your LIMIT query here as shown above


// later when outputting page, you can simply work with $page and $page_count to output links
// for example
for ($i = 1; $i <= $page_count; $i++) {
   if ($i === $page) { // this is current page
       echo 'Page ' . $i . '<br>';
   } else { // show link to other page   
       echo '<a href="/menuitem.php?page=' . $i . '">Page ' . $i . '</a><br>';
   }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डॉकर:कई छवियों को मिलाएं

  2. अपवाद:पहले से ही इस कनेक्शन से जुड़ा एक खुला डेटा रीडर है जिसे पहले बंद किया जाना चाहिए

  3. अपने प्रॉक्सीएसक्यूएल लोड बैलेंसर्स को कैसे क्लस्टर करें

  4. एक आरईएसटी एपीआई कैसे लिखें?

  5. त्रुटि 2002 (HY000):सॉकेट '/var/run/mysqld/mysqld.sock' के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता (2)