如何限制使用SQL结果生成的页数

时间:2012-10-18 21:35:58

标签: php sql count

我的代码中有一个非常好的系统,它将我的SQL结果放在不同的页面上,每页10行。这很好,并且完全按照应有的方式工作,但我想限制生成的页数。我的结果是按照特定的顺序排列,但是在25页之后,我认为这已经足够了(这将是250个结果)。我将如何添加到下面的代码中以最大化创建的页面数量?提前谢谢!

<?php 

// First I build my SQL which counts the amount of 
// rows, how this SQL query looks like depends on the 
// fields left blank and actually filled.

$sql = "SELECT COUNT(bedrijfsnaam) FROM profiles";

if ($bedrijfvariabele != " zoek op bedrijfsnaam.." && 
    $bedrijfvariabele != "") 
{
    $sql .= " WHERE bedrijfsnaam = '".$bedrijfvariabele."'";
}

if ($rubriekvariabele != " zoek op rubriek.." && 
    $rubriekvariabele != "" && 
    $bedrijfvariabele != " zoek op bedrijfsnaam.." && 
    $bedrijfvariabele != "") 
{
    $sql .= " AND (hoofdrubriek = '" . $rubriekvariabele . "' "
          . " OR subrubrieken LIKE '%" . $rubriekvariabele . "%')";
}

if ($rubriekvariabele != " zoek op rubriek.." && 
    $rubriekvariabele != "" && 
    ($bedrijfvariabele == " zoek op bedrijfsnaam.." || 
     $bedrijfvariabele == "")) 
{
    $sql .= " WHERE (hoofdrubriek = '" . $rubriekvariabele . "' "
          . " OR subrubrieken LIKE '%".$rubriekvariabele."%')";
}

if ($plaatsvariabele != " zoek op plaatsnaam.." && 
    $plaatsvariabele != "" && 
    (
        ($bedrijfvariabele != " zoek op bedrijfsnaam.." && 
         $bedrijfvariabele != "") || 
        ($rubriekvariabele != " zoek op rubriek.." && 
         $rubriekvariabele != "")
    )) 
{
    $sql .= " AND plaats = '".$plaatsvariabele."'";
}

if ($plaatsvariabele != " zoek op plaatsnaam.."  && 
    $plaatsvariabele != "" && 
    (
        ($bedrijfvariabele == " zoek op bedrijfsnaam.." || 
         $bedrijfvariabele == "")  && 
        ($rubriekvariabele == " zoek op rubriek.." || 
         $rubriekvariabele == "")
    )) 
{
    $sql .= " WHERE plaats = '".$plaatsvariabele."'";
}

// Now comes the interesting part for you guys

$rs_result     = mysql_query($sql); 
$row           = mysql_fetch_row($rs_result); 
$total_records = $row[0]; 
$total_pages   = ceil($total_records / 10); 

$template = '<a style="float:none;display:inline-block;color:white;'
          . 'width:22px;text-align:center;text-decoration:none;'
          . 'font-size:20px;background-color:#483435;margin-left:4px"'
          . ' href="%s".php?page=%s">%s</a>'; 


for ($i=1; $i <= $total_pages; $i++) 
{
    echo sprintf($template, $plaatsnaam7, $i, $i); 

}

4 个答案:

答案 0 :(得分:3)

听起来你只需要在查询中使用LIMIT关键字。

尝试这样的事情:     SELECT * FROM PEOPLE LIMIT 10

答案 1 :(得分:1)

来自

for ($i=1; $i<=$total_pages; $i++) { 
            echo "<a style=\"float:none;display:inline-block;color:white;width:22px;text-align:center;text-decoration:none;font-size:20px;background-color:#483435;margin-left:4px\" href='".$plaatsnaam7.".php?page=".$i."'>".$i."</a> "; 

};

if $total_pages>25 $total_pages=25;
for ($i=1; $i<=$total_pages; $i++) { 
            echo "<a style=\"float:none;display:inline-block;color:white;width:22px;text-align:center;text-decoration:none;font-size:20px;background-color:#483435;margin-left:4px\" href='".$plaatsnaam7.".php?page=".$i."'>".$i."</a> "; 

};

答案 2 :(得分:1)

我不会称之为'非常好的系统'。我最大的错误是加载了一些可能永远不会显示的数据量。您应该只加载您需要显示的切片 - 正如您所说的每页10行。你应该使用SLQ限制条款 - LIMIT offest, rowcount - 示例select * from mytable order by id limit 20,10 - 将显示10行,从id排序的结果中的第20行开始。你应该传递一个GET或POST参数设置当前页面的数量'page = 2'和$ ofsset = 10 *($ page-1); $ rowcount = 10; 'select .... LIMIT '.$offset.','.$rowcount

看看这个古老但很好的课程,它完美地展示了一个好的寻呼机系统:split_page_results.php。应该重写一些部分以遵循新的PHP规则,但这个想法已经明确实现。

在这里,yopu可以找到一个用法提示:enter link description here。祝你好运。

答案 3 :(得分:0)

只需让if语句检查您所在的页面。