如何在分页中显示长时间/ for循环?

时间:2015-03-06 19:52:27

标签: php

我有一个while / for循环,有数千个结果。由于它包含几个字段,我使用表来显示它。但是,如果同时显示数千个结果,肯定会降低性能。如何在分页中显示它?

    <table>
    <?php $count = 1000;
    for($a=1;$a<=$count;$a++) { ?>
        <tr>
            <td><?php echo $a; ?></td>
            <td>This is number <?php echo $a; ?></td>
        </tr>
    <?php $i++; 
    } ?>
    </table>

3 个答案:

答案 0 :(得分:1)

如果数据来自数据库,您可以限制结果集。如果您使用的是MySQL,请使用LIMIT子句。这将允许您仅获取指定的行数。

SELECT title, description FROM posts LIMIT 25

这只会获取25行。然后,如果要在第25行之后获取结果,则可以提供偏移量。这有点不同,因为偏移在LIMIT子句中首先出现。只提供了一个参数MySQL代替了它的限制。要选择您使用的下一个50行。

SELECT title, description FROM posts LIMIT 25, 50

这对于减少所获取的结果集非常有用,并且由于需要处理的数据量较少,因此有助于提高性能/加载时间。

我希望这可以帮助你,快乐编码!

更新

This is a little tutorial在MySQL中使用LIMIT子句

答案 1 :(得分:1)

我没有数据库的唯一解决方案是将您所在的阵列密钥传递给下一页。例如:

$start = 1;
$end = 1000;
if(isset($_GET['record_number'])){
    $start = $_GET['record_number'];
    $end = $_GET['record_number'] + 1000;
}

for($a=$start; $a<=$end; $a++){
    //code here
}

除此之外,您可以考虑在数据库引擎中创建文件列表,以便可以使用LIMIT参数。

答案 2 :(得分:1)

这是我的例子,它类似于@AnotherGuy

的答案
<form method="GET">
<input type="text" name="rowsPerPage">
<?php
    for($i = 1; $i+1 < $count/$rowsPerPage; $i++){
        echo '<input type="submit" name="page" value="'.$i.'">';
    }
?>
</form>


<?php
    $begin = (int)$_GET['rowsPerPage']*$_GET['page'];
    $take = (int)$_GET['rowsPerPage'];
    $sql = "SELECT ... LIMIT {$begin}, {$take}";
?>

代码可能包含&#34;拼写错误&#34;,但我希望它能为您提供新的想法。

我建议您使用GET而不是POST。 GET将保存在URL中,这样,在不丢失页面设置的情况下重新加载页面会更容易。

www.example.com?rowsPerPage=150&page=2