将表数据拆分为具有页码的不同页面

时间:2015-01-21 05:13:09

标签: php html

我已经以数组形式(例如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>

3 个答案:

答案 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