【发布时间】:2018-08-18 19:49:10
【问题描述】:
我正在尝试使用单个 php sql 查询来存档分页,因为我觉得运行 select 语句两次太多了,因为我想对我的数据进行分页我已经尝试了查询功能 (*)count
我尝试设置一个限制,如果 number_of_rows 等于我的限制,我会自动分页这适用于两页,但我无法确定第三页,所以它不是一个好方法。
我正在考虑的另一种方法是获取所有数据,然后使用 java 脚本进行分页,但我不知道该怎么做,所以我尝试用 php 来做,但想学习如何用 java 脚本来做如果可能的话。
我只想运行一个查询并分页感谢您的帮助
这是我的代码:
<?php
//count rows in table
$query= "SELECT * FROM $database.$table WHERE `id` <> '$id'";
$result= mysqli_query($conn, ($query));
$results_per_page =30;
//calculate total pages
if($result)
{
$num_row = mysqli_num_rows($result);
mysqli_free_result($result);
$total_pages = ceil($num_row / $results_per_page);
}
//to get page value
if(isset($_GET["page"])){
$page =$_GET["page"];
} else{
$page=1;
};
$start_from = ($page-1) * $results_per_page;
$start_from_here = mysqli_real_escape_string($conn, stripslashes($start_from));
$start_from_here = filter_var($start_from_here, FILTER_SANITIZE_NUMBER_INT );
//get data to display
$query1= " SELECT * FROM $database.$table
WHERE `id` <> '$id'
ORDER BY type ASC
LIMIT $results_per_page OFFSET $start_from_here ";
$result1= mysqli_query($conn, ($query1));
而我的html分页代码就是这样
<?php
if(isset($total_pages) && ($total_pages>1)) {
$url="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$url=strtok($url, '?');
for ($i=1; $i<=$total_pages; $i++) {
//Print links for all pages
echo "<a class='pagination' href='".$url."?page=".$i."'>".$i."</a>";
}
}
?>
感谢大家的帮助
【问题讨论】:
-
您目前的方法到底有什么问题?
-
@Sayra,看。除非您正在缓存从数据库中获取的结果(我没有看到发生这种情况),否则每次将看到的每个页面都会执行相同的查询。鉴于此,如果您仍想使用基于完整结果的分页,我将编写一个示例。这是你想要表演的吗? (考虑到您可能拥有的行数,这可能会极大地影响它的性能)
-
是的,我只是想要获得行数和分页的最佳方法,而不必两次查询表
-
我在做或找到一种解决方案之间,结果发现这个很棒,请检查一下:stackoverflow.com/questions/3705318/…
-
是的,你查询了两次,但是
FOUND_ROWS()的查询很简单,不需要访问表数据。
标签: javascript php html pagination