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