如何从MySQL数据库创建分页表?

时间:2013-11-22 02:09:35

标签: php html mysql css pagination

我即将开始研究一个新项目,并在开始之前想要一些建议。

我有一个MySQL表,我需要在我的网站上显示。该表中有超过1亿行。该表格中有两列:domainiddomainname

domainid列只是从1开始,最多超过1亿的数字。在domainname表中,我有一个域列表,如下所示:

test1
test2
test3
test4
test5
test6

基本上我要做的就是:

我想在我的网站上每页显示1000个域名 - 在表格中。该表将是4列和250行。首先,我不确定如何从数据库中获取数据并实际将其显示在我的HTML表中。我知道它可以用PHP完成,当然不知道如何。

我需要补充的第二件事是某种分页。它不需要漂亮,我只需要一种方法在列表底部自动生成页面,这样人们可以从一个页面转到下一个页面并在每个页面上查看1000条记录 - 显然我不想要所有1亿条记录显示在一个页面上。

所以这就是我遇到的问题:我不确定如何获取MySQL数据并快速将其显示在我的网站上 - 我不希望它永远加载页面只是因为数据库很大。第二,我真的需要一种方法来为表添加分页。

如果有人能指出我正确的方向,我将不胜感激。我不确定这样做有多难,但你能提供的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

这将为您提供总行数

Select count(*) from yourtable

然后要显示一个页面,做一些像这样的眩晕数学

$rows_per_page = 1000;
$page_no = 2;  // hint, start counting pages at page 0, it will make things easier
$offset = $page_no * $rows_per_page;

// 0 = offset (where to start)
// 1000 = number of rows returned
select * from yourtable limit $offset,$rows_per_page

因为你有这么多行,所以我会使用html选择来选择你要去的页面,或者只是选择下一个和上一个按钮然后保留它

要弄清楚有多少页面,你需要更多的数学

$total_rows = 100000000;
$rows_per_page = 1000;
$num_pages = $total_rows / $rows_per_page;

答案 1 :(得分:1)

使用此代码:    在php中创建页面配置,分页,索引。

  • 此处Paginate页面为格式创建设计(上一页和下一页按钮以滚动页面)。
  • 配置与数据库建立连接。
  • 索引页首先定义每页创建结果数,页码,总结果等的变量
  • 索引页面(设计)定义了页面显示的方式,可以根据您的优先级修改页面设计。

<强> CONFIG.PHP

$mysql_hostname = "host"; 
$mysql_user = "usr";            
$mysql_password = "pass";           
$mysql_database = "db"; 

$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Opps some thing went wrong");
mysql_select_db($mysql_database, $bd) or die("Error on database connection");

<强> PAGINATE.PHP

function paginate($reload, $page, $tpages) {
$adjacents = 2;
$prevlabel = "&lsaquo; Prev";
$nextlabel = "Next &rsaquo;";
$out = "";
// previous
if ($page == 1) {
    $out.= "<span>".$prevlabel."</span>\n";
} elseif ($page == 2) {
    $out.="<li><a href=\"".$reload."\">".$prevlabel."</a>\n</li>";
} else {
    $out.="<li><a href=\"".$reload."&amp;page=".($page - 1)."\">".$prevlabel."</a>\n</li>";
}
$pmin=($page>$adjacents)?($page - $adjacents):1;
$pmax=($page<($tpages - $adjacents))?($page + $adjacents):$tpages;
for ($i = $pmin; $i <= $pmax; $i++) {
    if ($i == $page) {
        $out.= "<li class=\"active\"><a href=''>".$i."</a></li>\n";
    } elseif ($i == 1) {
        $out.= "<li><a href=\"".$reload."\">".$i."</a>\n</li>";
    } else {
        $out.= "<li><a href=\"".$reload. "&amp;page=".$i."\">".$i. "</a>\n</li>";
    }
}

if ($page<($tpages - $adjacents)) {
    $out.= "<a style='font-size:11px' href=\"" . $reload."&amp;page=".$tpages."\">" .$tpages."</a>\n";
}
// next
if ($page < $tpages) {
    $out.= "<li><a href=\"".$reload."&amp;page=".($page + 1)."\">".$nextlabel."</a>\n</li>";
} else {
    $out.= "<span style='font-size:11px'>".$nextlabel."</span>\n";
}
$out.= "";
return $out;
}

<强>的index.php

<?php
include('config.php');    //include of db config file
include ('paginate.php'); //include of paginat page

$per_page = 1000;         // number of results to show per page

$result = mysql_query("SELECT * FROM YOURTABLE");

$total_results = mysql_num_rows($result);
$total_pages = ceil($total_results / $per_page);//total pages we going to have
//-------------if page is setcheck------------------//
if (isset($_GET['page'])) {
$show_page = $_GET['page']; //current page
if ($show_page > 0 && $show_page <= $total_pages) {
    $start = ($show_page - 1) * $per_page;
    $end = $start + $per_page;
} else {
    // error - show first set of results
    $start = 0;              
    $end = $per_page;
}
} else {
// if page isn't set, show first set of results
$start = 0;
$end = $per_page;
}
// display pagination
$page = intval($_GET['page']);
$tpages=$total_pages;
if ($page <= 0)
$page = 1;

?>

//设计和显示数据(代码在index.php中继续)

<?php
$reload = $_SERVER['PHP_SELF'] . "?tpages=" . $tpages;
echo '<div class="pagination"><ul>';
if ($total_pages > 1) {
    echo paginate($reload, $show_page, $total_pages);
}
echo "</ul></div>";
// display data in table
echo "<table class='table table-bordered'>";
echo "<thead><tr><th>DOMAIN CODE</th> <th>DOMAIN Name</th></tr></thead>";
// loop through results of database query, displaying them in the table 
for ($i = $start; $i < $end; $i++) {
    // make sure that PHP doesn't try to show results that don't exist
    if ($i == $total_results) {
        break;
    }
    // echo out the contents of each row into a table
    echo "<tr " . $cls . ">";
    echo '<td>' . mysql_result($result, $i, 'domainid') . '</td>';
    echo '<td>' . mysql_result($result, $i, 'domainname') . '</td>';
    echo "</tr>";
}       
// close table>
echo "</table>";
// pagination
?>