【问题标题】:On request pagination(Paginate records on demand of user)根据请求分页(根据用户要求对记录进行分页)
【发布时间】:2012-10-22 10:21:59
【问题描述】:

我正在处理一个显示记录数量的网格,基于一些过滤器。当用户单击网格底部的链接 显示更多时,我想对它们进行分页。我试过了进行搜索,但是,要么找到页码的东西,要么找到某种自动滚动。但是,我怎样才能在我的场景中工作? 到目前为止我的研究是,我将不得不编写一个函数 onclick 的链接,使用 ajax 获取 下一批 记录(例如每个请求 20 条)。但是编程部分将如何工作。我在服务器端使用 PHPMysql 作为我的数据库 有人可以指导我吗。谢谢您的时间。

【问题讨论】:

  • 请使用mySQL的offset和limit。最初获取所有记录并计算它们,例如 $total_rec = count(SELECT * FROM TABLE);也只在网格中显示 20 条记录,即 SELECT * FROM TABLE LIMIT 20 OFFSET 0,然后在下一个请求中发送 OFFSET 21,依此类推。

标签: php javascript jquery mysql


【解决方案1】:
if(isset($_GET['page']))
{
    $page=$_GET['page'];
}
else
{
    $page=1;
}

if(isset($_GET['dark']))
{
    $max_result=$_GET['dark'];

}
else
{
    $max_result=5;
}

$from=(($page*$max_result)-$max_result);

mysql_select_db("db",$con);
$sql = "SELECT COUNT(*) FROM `db`.`table` ";
$result=mysql_query($sql);

$total_result=mysql_result($result,0);
$total_pages=ceil($total_result/$max_result);

if($total_result>$max_result)
{
    if($page>1)
    {
        $prev=$page-1;
        echo "<a href=\"".$_SERVER['PHP_SELF']."?dark=".$max_result."&page=$prev\">previous</a>";
    }
    for($i=1;$i<=$total_pages;$i++)
    {
        if($page==$i)
        {
        echo "<strong>".$i."</strong>";
        }
        else
        {
        echo "<a href=\"".$_SERVER['PHP_SELF']."?dark=".$max_result."&page=$i\">$i</a> ";
        }
        if($page<$total_pages)
        {
        $next=$page+1;

        //echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\"></a>";
        }
    }

        if($page<$total_pages)
        {
                $next=$page+1;
                echo "<a href=\"".$_SERVER['PHP_SELF']."?dark=".$max_result."&page=$next\">next</a>";
        }
}

         echo "<table><tr>";

            echo "<td><form action='helloworld.php' name='get'>
                <select name='dark'>
                <option value='2'>2</option>
                <option value='5'>5</option>
                <option value='10'>10</option>
                </select>
                <input type='hidden' name='searching' value='yes' /><input type='submit' value='No.of entries'>
                </form></td></tr>";         
            echo "<tr><td><strong>PAGE NUMBER $page of $total_pages.</strong>.</td></tr>";
            echo"</table>";

【讨论】:

    【解决方案2】:

    您可以在 sql 查询中尝试LIMIT

    传递 URL 中的 LIMIT offsetlimit 并相应地处理/显示数据 & 将当前的offsetlimit 发送回网页(以便您可以制作显示更多链接的网址)

    我认为这就是它在大多数地方和框架中的实现方式

    桑迪普

    【讨论】:

      【解决方案3】:

      在查询中使用

       SELECT list_of_column FROM table 
       ORDER BY column_id DESC
       LIMIT 20 OFFSET 0
      

      只需更改每次点击的偏移值,您就会得到想要的结果

      php 中的分页,refer

      【讨论】:

      • 感谢您的及时回复,但我不希望它是传统风格。我希望单击单个链接即可。每次单击都会获取接下来的 20 条记录。(不显示页面数字)。偏移量和计数功能如何作为页码不会改变。
      【解决方案4】:

      在MysqlQuery中,可以使用LIMIT begin, max函数: SELECT * FROM db LIMIT 100, 10 将从偏移量 10 开始选择 10 个数据集。

      您必须通过 javascript 将 $_GET 或 $_POST 变量传递给 php 脚本:

      $.ajax({
          [...],
          url: "script.php",
          data: {
              page: <page to load>
          },
          [...]
      })
      

      现在在 php 脚本中修改查询:

      $query = "SELECT * FROM database LIMIT " . $_GET['page'] . ", " . $entrys_per_page;
      

      【讨论】:

      • 感谢您的及时回复,但我不希望它是传统风格。我希望单击单个链接即可。每次单击都会获取接下来的 20 条记录。(不显示页面数字)。偏移量和计数功能如何作为页码不会改变。
      猜你喜欢
      • 1970-01-01
      • 2016-10-13
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多