我正在尝试使用单个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>";
}
}
?>
感谢您的帮助
答案 0 :(得分:1)
由于您的第一个查询仅在查找行数,因此可以通过选择行数来对此进行优化。
$query= "SELECT COUNT(*) FROM $database.$table WHERE `id` <> '$id'";
这样,SQL Server将只返回行数,而不是匹配的行。
修改
您还可以加载整个数据并将其存储在会话变量中。这样一来,您只需加载一次数据即可显示相关零件,而无需其他查询。
答案 1 :(得分:0)
不可能在单个查询中同时执行。您可以通过执行
来优化聚合SELECT COUNT(1) AS row_count
FROM database.table_name
WHERE `id` <> YOUR_ID_HERE
然后,您可以使用row_count变量来进行有关总页数和限制的所有计算。