我有一个数据库。当我获取数据时,它有很多行。我想打破这个结果。我阅读了很多关于分页的教程但不了解如何分页。 以下是我的代码 -
<?php
if(isset($_GET['search_profile'])){
$gender = $_GET['Gender'];
$religion = $_GET['selected_religion'];
$caste = $_GET['selected_caste'];
$marital_status = $_GET['marital_status'];
$lage = $_GET['lage'];
$hage = $_GET['hage'];
$current_date = date('Y');
$hage1 = date('Y') - $hage;
//echo $hage1;
// echo "<br>";
$lage1 = date('Y') - $lage;
//echo $lage1;
$qq = "SELECT * FROM members WHERE yyyy BETWEEN '$hage1' AND '$lage1' AND gender='$gender'
AND religion LIKE '%$religion%'
AND caste LIKE '%$caste%'
AND marital_status LIKE '%$marital_status%'";
$profile_query_result = mysql_query($qq, $dbc)
or die('Error1'.mysql_error());
}
?>
答案 0 :(得分:0)
您可以使用LIMIT关键字告诉MySQL要获取的记录数,并指定起始偏移量
SELECT *
FROM members
WHERE yyyy BETWEEN '$hage1' AND '$lage1'
AND gender='$gender'
AND religion LIKE '%$religion%'
AND caste LIKE '%$caste%'
AND marital_status LIKE '%$marital_status%'
LIMIT 0,100
上面的SQL查询将返回前100条记录,从第一个
开始如果您想要接下来的100个(即从记录#101开始的100个记录),那么您将使用LIMIT 100, 100
;然后是下一个100 LIMIT 200,100
等等..
当然,如果您希望从PHP控制页码,您可以使用参数而不是硬编码值,如下所示:
SELECT *
FROM members
WHERE yyyy BETWEEN '$hage1' AND '$lage1'
AND gender='$gender'
AND religion LIKE '%$religion%'
AND caste LIKE '%$caste%'
AND marital_status LIKE '%$marital_status%'
LIMIT '$offset', '$recordsPerPage'
然后$ offset应该以$ recordsPerPage(即0,100,200,... n * 100)的增量取值,$ recordsPerPage可以是您希望在每个页面上显示的任何数量的记录(通常为10,20)或100)
答案 1 :(得分:0)
如果客户端分页不是问题,一个简单的解决方案是使用Jquery分页。您可以在 http://www.datatables.net/release-datatables/examples/basic_init/alt_pagination.html
上查看示例在您的JavaScript代码中添加:
$(document).ready(function() {
$('#example').dataTable( {
"sPaginationType": "full_numbers"
} );
} );
其中'example'是您的元素的ID。
答案 2 :(得分:0)
我前几天刚完成了我的第一个分页脚本。这并不难。老实说,我很乐意帮助你理解它的逻辑,但我不会为你编写代码 - 我也相信这个主题已经涵盖了这个主题,这可能是重复的。
你知道多少PHP?您的分页脚本背后的逻辑(假设数据来自数据库)是这样的:
您至少需要2次数据库查询 - 您的第一个查询将告诉您有多少结果,您的第二个查询将实际提供结果。
您需要一些变量 - 您需要知道项目数量。您还需要知道限制 - 即每页上可显示的项目数。您可以通过将限制除以项目数(项目数/每页限制数)来找到页数
显示HTML - 要创建分页的HTML,我使用了一系列if语句。有点像下面的伪代码:
if ( isset( $_GET['page'] ) ) {
$page = preg_replace( '/[^0-9]/', '', $_GET['page'] );
}
else {
$page = 1;
}
/* the following code will not work
with the identity (===) operator
because when coming from get $page
is a string not an int */
if ( $current_page == 1 ) {
$page2 = $page + 1;
$page3 = $page + 2;
$page4 = $page + 3;
$pagination .= "<div>Pg $page</div>";
// if theres a second page, display page 2
if ( $num_of_posts > ( $limit * 1 ) ) {
$pagination .= "<a>$page2 ></a>";
}
// if there is a 3rd page
if ( $num_of_posts > ( $limit * 2 ) ) {
$pagination .= "<a>$page3 ></a>";
}
// if there is a 4th page
if ( $num_of_posts > ( $limit * 3 ) ) {
$pagination .= "<a>$page4 ></a>";
}
// if there is more than 4 pages
if ( ($page4 != $last_page && $page3 != $last_page ) {
$pagination .= "<a href='" . $last_page . "'>> ></a>";
}
}
需要重复此过程。你重复多少完全取决于你。您可以将if / elseif语句重写为switch语句,我个人不在Web编程中使用switch语句。
你可以采用相同的方法($ page == 2),($ page == $ last_page),($ page ==($ last_page - 1)。你可以过火。这只是确保HTML如果只有一页或两页内容,则输出将是合适的。
第二个查询 - 第二个查询将从数据库中获取结果。限制将是(($ page - 1)* $ limit_per_page),$ limit_per_page
即:
$limit = ( $page - 1) * $limit_per_page
$sql= "SELECT post, user, id, etc, whatever
FROM table
WHERE this = that
ORDER BY foobarz ASC[/DESC]
LIMIT ".$limit.",".$limit_per_page;
我希望这足以让你解释它!祝好运!如果您需要更多解释,请告诉我们!