我已经以数组形式(例如user [])获取并存储了数据库值(取决于条件),并且我已将它们打印在表格中。 但是当我在阵列中存储多达500个数据时,我想在页面中打印它。是否可以分割和打印每页有10个条目的数据?如果是,请帮助我。
这是我从数据库中获取数据并分配给数组用户[]的代码:
$sql2=mysql_query("SELECT inc_patientName,inc_patientAge FROM incident_main WHERE ((inc_patientWard='$ward') AND(inc_date BETWEEN '$startdate' AND '$enddate'))ORDER BY inc_patientName ");
$c=mysql_num_rows($sql2);
while($row=mysql_fetch_array($sql2)){
$user[]=$row;
}
这里我在表格中打印数组:
<table align="center" border="1" cellpadding="10" cellspacing="1" width="500" class="tblListForm">
<tr class="tableheader">
<td>Patient Name</td>
<td>Age</td>
</tr><?php
foreach($user as $item)
{
$inc_patientName=$item['inc_patientName'];
$inc_patientAge=$item["inc_patientAge"];
?>
<tr>
<td><?php echo $item["inc_patientName"]; ?></td>
<td><?php echo $item["inc_patientAge"]; ?></td>
</tr>
<?php
}?>
</table>
答案 0 :(得分:2)
首先,您可以使用mysql LIMIT
创建分页。
$page = $_GET["page"];
$start = 5 + 50 * ($page - 1);
$rows = 50;
$sql = "SELECT ... FROM table WHERE ... LIMIT $start, $rows";
如果$page=1
,则仅从完整结果中选择第6-55行。在实际情况中,$start
应为50*($page-1)
,而不是5
。仅显示5
以显示函数LIMIT
的工作原理。
然后,您可以在网址中将$start
设置为$_GET
参数。
在前端,您可以创建这样的分页链接:
<ul>
<li><a href="page.php?page=1">Page 1</li>
<li><a href="page.php?page=2">Page 2</li>
</ul>
可以使用php foreach
创建。要在显示页面之前获取页数,您可以从表中选择count(*)一次,然后将计数除以50,然后将其四舍五入。
否则,您可以从数据库中获取所有500多个数据并传送到前端,然后使用插件(如jquery datatable)来设置样式。
答案 1 :(得分:1)
您要查找的是从数据库中提取的结果集的分页。
如果您在后端存储了大量数据(比如几MB),通常不建议一次性获取所有数据。相反,首先获取一组有限的记录(行),当用户移动到下一页时,获取另一组记录。
所以不要做像
这样的事情SELECT * from student
你应该考虑做
SELECT * FROM student LIMIT start_from, num_rec_per_page;
This是关于PHP和MySQL分页的很好的教程,here是一个有效的例子。
希望有所帮助
答案 2 :(得分:0)
明确地将SQL更改为使用LIMIT和OFFSET。
首先,你只使用LIMIT获得前10个。
SELECT inc_patientName,inc_patientAge FROM incident_main WHERE ((inc_patientWard='$ward') AND(inc_date BETWEEN '$startdate' AND '$enddate'))ORDER BY inc_patientName LIMIT 10
然后在每个进行中的请求中,您将使用OFFSET,以您需要的10的倍数。 10,然后是20,然后是30,依此类推。
SELECT inc_patientName,inc_patientAge FROM incident_main WHERE ((inc_patientWard='$ward') AND(inc_date BETWEEN '$startdate' AND '$enddate'))ORDER BY inc_patientName LIMIT 10 OFFSET 10