title: Php&mysql pagination script for huge website
body: <p>I have a big database with over 3 million rows and i need a php&amp;mysql pagination script. I already have one but after i pass the level of 1000 pages it's working very slow like minutes to load. Any script/advice that can help me is welcomed.</p>
  
  <p>Edit, im using this script</p>
  
  <pre><code>&lt;?php
  // Script de paginare, de la http://www.marplo.net
  
  // Datele pt. conectare la baza de date
  // MODIFICATI
  $host = "localhost";    // server MySQL
  $utilizator = "root"; 
  $parola = "parola";
  $numebd = "nume_bd";    // nume baza de date
  
  // Conectarea la baza de date
  $conn = mysql_connect($host, $utilizator, $parola);
  if (!$conn) {
    echo 'Conectare nereusita la MySQL'; 
    exit;
  }
  
  // Selectarea bazei de date
  if (!mysql_select_db($numebd, $conn)) {
    echo 'Baza de date nu a putut fi selectata deoarece : '. mysql_error();
    exit;
  }
  
  // Setarea pentru format UTF-8
  $sql = "SET NAMES 'utf8'";
  mysql_query($sql, $conn);
  
  // Afla cate linii sunt in tabel (MODIFICATI 'nume_tb') din baza de date  
  $sql = "SELECT COUNT(*) FROM `nume_tb`";  
  $result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR);  
  $r = mysql_fetch_row($result);  
  $numrows = $r[0];  
  
  // Stabileste numarul de linii din tabel afisate in pagina 
  $rowsperpage = 10;  
  // afla numarul total necesar de pagini 
  $totalpages = ceil($numrows / $rowsperpage);        // ceil face rotunjire la int. maxim
  
  // Obtine pagina curenta sau seteaza default 
  if (isset($_GET['currentpage']) &amp;&amp; is_numeric($_GET['currentpage'])) {  
    // seteaza variabila ca int 
    $currentpage = (int) $_GET['currentpage'];  
  } else {  
    // pagina care este initial afisata (pagina default) 
    $currentpage = 1;  
  }
  
  // daca pagina curenta e mai mare decat total pagini...
  if ($currentpage &gt; $totalpages) {  
    // seteaza pagina curenta la ultima pagina  
    $currentpage = $totalpages;  
  } 
  // daca pagina curenta e mai mica decat prima pagina...  
  if ($currentpage &lt; 1) {  
    // seteaza pagina curenta la prima pagina   
    $currentpage = 1;  
  } 
  
  // lista cu pagini, in functie de pagina curenta   
  $offset = ($currentpage - 1) * $rowsperpage;  
  
  // obtine datele din tabel (MODIFICATI 'nume_tb') din baza de date  
  $sql = "SELECT * FROM `nume_tb` LIMIT $offset, $rowsperpage";  
  $result = mysql_query($sql, $conn) or trigger_error(E_USER_ERROR);  
  
  // parcurgerea matricei cu datele obtinute 
  while ($list = mysql_fetch_assoc($result)) {  
    // - MODIFICATI numele coloanelor tabelului ('id' si 'texte')
    // Stocheaza datele returnate de MySQL in variabile array pt. fiecare coloana
    $id[] = $list['id'];
    $text[] = $list['texte'];
  }
  mysql_close();  // Incheie conexiunea cu mysql
  
  /*** Afisarea datelor obtinute ***/
  // Parcurge variabilele array setate in bucla WHILE
  for($i=0; $i&lt;count($id); $i++) {
    // Aici puteti adauga cod HTML pentru aspectul grafic al afisarii
    echo $id[$i]. " - ". $text[$i]. "&lt;br /&gt;";
  }
  
  /*** Construirea link-urilor pt. paginare ***/ 
  // raza nr. link-uri din jurul celui curent 
  $range = 3;
  
  // Link-uri inapoi, daca pagina curenta nu e prima
  if ($currentpage &gt; 1) {  
    // arata &lt;&lt; pt. link la prima pagina  
    echo " &lt;a href='{$_SERVER['PHP_SELF']}?currentpage=1'&gt;&amp;lt;&amp;lt;&lt;/a&gt; &amp;nbsp; ";  
    // obtine nr. pagina din urma 
    $prevpage = $currentpage - 1;  
    // arata &lt; pt. link la o pagina in urma 
    echo " &lt;a href='{$_SERVER['PHP_SELF']}?currentpage=$prevpage'&gt;&amp;lt;&lt;/a&gt; &amp;nbsp;";  
  } 
  
  // definirea link-urilor din raza paginii curente
  for ($x = ($currentpage - $range); $x &lt; (($currentpage + $range) + 1); $x++) {  
    // daca e un nr. de pagina valid ... 
    if (($x &gt; 0) &amp;&amp; ($x &lt;= $totalpages)) {  
       // daca nr. e pagina curenta ...  
       if ($x == $currentpage) {  
          // afiseaza nr. pagina fara a fi link  
          echo " [&lt;b&gt;$x&lt;/b&gt;] ";  
       // daca nr. nu e pagina curenta ...  
       } else {  
          // il face link  
      echo " &lt;a href='{$_SERVER['PHP_SELF']}?currentpage=$x'&gt;$x&lt;/a&gt; ";  
       }  
    }
  }
  
  // Daca pagina curenta nu e ultima, afiseaza link inainte si spre ultima pagina
  if ($currentpage != $totalpages) {  
    // obtine pagina urmatoare 
    $nextpage = $currentpage + 1;  
     // arata &gt; pt. urmatoarea pagina   
    echo "&amp;nbsp; &lt;a href='{$_SERVER['PHP_SELF']}?currentpage=$nextpage'&gt;&amp;gt;&lt;/a&gt; ";  
    //  arata &gt;&gt; pt. ultima pagina
    echo " &amp;nbsp; &lt;a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'&gt;&amp;gt;&amp;gt;&lt;/a&gt; ";  
  }
  ?&gt;
  </code></pre>