限制巨大数据库的分页数

时间:2014-07-07 00:30:18

标签: php mysql database pagination limit

我无论如何似乎无法找到答案所以我猜我至少要问谷歌我是否尝试谷歌我正在制作一个类似于Facebook已经获得的群组功能但是因为我没有那么好。是唯一一个发展这个的人,但随着时间的推移,它会变得更好。

反正 如何使此代码限制分页数?例如,如果数据库中存在大量结果,我只想在使用点之后显示前10个,这样他们可以点击并进行更深入的搜索,如果他们想这样做,当点击该点时他们会得到另外10个结果所以20然后-30将显示为分页。我完全不需要它,但有些方法可以限制一次显示的数字量。

这里;代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<style type="text/css">
#content
{
    width: 900px;
    margin: 0 auto;
    font-family:Arial, Helvetica, sans-serif;
}
.page
{
float: right;
margin: 0;
padding: 0;
}
.page li
{
    list-style: none;
    display:inline-block;
}
.page li a, .current
{
display: block;
padding: 5px;
text-decoration: none;
color: #8A8A8A;
}
.current
{
    font-weight:bold;
    color: #000;
}
.button
{
padding: 5px 15px;
text-decoration: none;
background: #333;
color: #F3F3F3;
font-size: 13PX;
border-radius: 2PX;
margin: 0 4PX;
display: block;
float: left;
}
</style>


</head>
<body>
<div id="content">
<?php
error_reporting(0);
$query1=mysql_connect("localhost","root","");
mysql_select_db("freeze_demo",$query1);
error_reporting(0);
$start=0;
$limit=1;

if(isset($_GET['id']))
{
    $id=$_GET['id'];
    $start=($id-1)*$limit;
}

$query=mysql_query("select * from pagination LIMIT $start, $limit");
echo "<ul>";
while($query2=mysql_fetch_array($query))
{
    echo "<li>".$query2['text1']."</li>";
}
echo "</ul>";


$rows=mysql_num_rows(mysql_query("select * from pagination"));
$total=ceil($rows/$limit);

if($id>1)
{
    echo "<a href='?id=".($id-1)."' class='button'>PREVIOUS</a>";
}
if($id!=$total)
{
    echo "<a href='?id=".($id+1)."' class='button'>NEXT</a>";
}

echo "<ul class='page'>";
        for($i=1;$i<=$total;$i++)
        {

            if($i==$id) { echo "<li class='current'>".$i."</li>"; }

            else { echo "<li><a href='?id=".$i."'>".$i."</a></li>"; }
        }
echo "</ul>";
?>
</div>
</body>
</html>

当我的数据库或某个群体变大时,基本上需要更新它。

由于

2 个答案:

答案 0 :(得分:1)

<?php 
function custom_pagination($page, $totalpage, $link, $show)  //$link = '&page=%s' 
{ 
    //show page 
if($totalpage == 0) 
{ 
return 'Page 0 of 0'; 
} else { 
    $nav_page = '<div class="navpage"><span class="current">Page '.$page.' of '.$totalpage.': </span>'; 
    $limit_nav = 3; 
    $start = ($page - $limit_nav <= 0) ? 1 : $page - $limit_nav; 
    $end = $page + $limit_nav > $totalpage ? $totalpage : $page + $limit_nav; 
    if($page + $limit_nav >= $totalpage && $totalpage > $limit_nav * 2){ 
        $start = $totalpage - $limit_nav * 2; 
    } 
    if($start != 1){ //show first page 
        $nav_page .= '<span class="item"><a href="'.sprintf($link, 1).'"> [1] </a></span>'; 
    } 
    if($start > 2){ //add ... 
        $nav_page .= '<span class="current">...</span>'; 
    } 
    if($page > 5){ //add prev 
        $nav_page .= '<span class="item"><a href="'.sprintf($link, $page-5).'">&laquo;</a></span>'; 
    } 
    for($i = $start; $i <= $end; $i++){ 
        if($page == $i) 
            $nav_page .= '<span class="current">'.$i.'</span>'; 
        else 
            $nav_page .= '<span class="item"><a href="'.sprintf($link, $i).'"> ['.$i.'] </a></span>'; 
    } 
    if($page + 3 < $totalpage){ //add next 
        $nav_page .= '<span class="item"><a href="'.sprintf($link, $page+4).'">&raquo;</a></span>'; 
    } 
    if($end + 1 < $totalpage){ //add ... 
        $nav_page .= '<span class="current">...</span>'; 
    }     
    if($end != $totalpage) //show last page 
        $nav_page .= '<span class="item"><a href="'.sprintf($link, $totalpage).'"> ['.$totalpage.'] </a></span>'; 
    $nav_page .= '</div>'; 
    return $nav_page; 
} 
} 


//using
if(isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    $page = 1;
}
$sql = "SELECT count(*) AS total FROM post ORDER BY idpost DESC"; //please select COUNT is fast
$result = mysql_query($sql);
$rows = mysql_fetch_array($result);
$show = 5; //Show 5 result per page
$totalpage = ceil($rows['total'] / $show); //Total page
$start = ($page * $show) - $show; //Start result

$yourQuery = "SELECT * FROM post ORDER BY id LIMIT $start, $show";
//Query and show here

//Show pagination
echo custom_pagination($page, $totalpage, 'index.php?action=detail&page=%s', $show);

?>

答案 1 :(得分:1)

鉴于$ id是一个页码(可能将其重构为$ page,因此它被识别为页码,而不是特定记录的唯一ID),您可以将最终的for循环更改为有点限制性更强。

例如,不是从1开始,而是从当前页面之前的5页开始。而不是以$total结束,而是在当前页面之后的5页结束。

$start = $id - 5.
if ($start < 1) {
    $start = 1;
}
$end = $id + 5;
if ($end > $total) {
    $end = $total;
}

for ($i = $start; $i <= $end; $i++) {
    // echo pagination options
}

您也可以对此进行修改,以提供可以让您更接近您想去的地方的链接(例如,如果显示20到30页,100页,显示第10,40,50和60页的链接,甚至是供应一个输入框,让您跳转到特定页面。