繁体   English   中英

如何在分页中显示很长的for / for循环?

[英]How to display long while/for loop in pagination?

我有一个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>

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

SELECT title, description FROM posts LIMIT 25

这只会获取25行。 然后,如果要在第25行之后获取结果,则可以提供一个偏移量。 由于偏移量在LIMIT子句中排在第一位,因此这样做有所不同。 仅提供了一个参数,而MySQL假定其为极限。 要选择接下来的50行,请使用。

SELECT title, description FROM posts LIMIT 25, 50

由于减少了需要处理的数据量,因此这对于减少获取的结果集并帮助增加性能/加载时间很有用。

希望对您有所帮助,编码愉快!

更新资料

这是一个在MySQL中使用LIMIT子句的小教程

我唯一没有数据的数据库的解决方案是将您要使用的数组键传递到下一页。 例如:

$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参数。

这是我的示例,类似于@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}";
?>

该代码中可能包含“ typos”,但我希望它能为您带来新的想法。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM