【问题标题】:How to create paginated table from MySQL database?如何从 MySQL 数据库创建分页表?
【发布时间】:2013-11-22 14:14:03
【问题描述】:

我即将开始一个新项目的工作,在开始之前需要一些建议。

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

domainid 列只是从 1 开始到超过 1 亿个的数字。在domainname 表中,我有一个域列表,例如:

test1
test2
test3
test4
test5
test6

基本上我要做的是:

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

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

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

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

【问题讨论】:

  • 你有没有试过使用像 CodeIgniter 这样的 PHP 框架?它有一个内置的分页。这是链接,它可能会给你一个想法ellislab.com/codeigniter
  • 我认为你应该从谷歌学习基础开始。如果你搜索得足够好,你甚至可以找到预先写好的东西。这里不适合提出这样的问题。
  • 有很多方法可以满足我的要求。我在这里问的原因是因为我想知道最好的方法是什么。
  • 我认为您不应该专注于最佳方式。首先至少得到一个“方式”然后带着那个“方式”来到这里并询问如何优化它或修复它。我建议你先学习一些关于从 mysql 获取数据的教程。
  • @user2970202:查看答案。这是使用函数创建不同文件并定义起始页和结束页的最佳方法,因此结果根据要求显示

标签: php html mysql css pagination


【解决方案1】:

这将为您提供总行数

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;

【讨论】:

    【解决方案2】:

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

    • Paginate 页面创建格式设计(用于滚动页面的上一个和下一个按钮)。
    • 配置创建与数据库的连接。
    • 索引页面首先定义创建每页结果数、页码、总结果等变量
    • index page(design) 定义了页面如何显示,可以根据你的优先级进行修改以显示页面设计。

    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 = "‹ Prev";
    $nextlabel = "Next ›";
    $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
    ?>       
    

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2012-05-15
      相关资源
      最近更新 更多