我使用此查询:
$result_members = mysql_query("SELECT * FROM members");
结果显示在我的管理页面上的表格中,如下所示:
while($row = mysql_fetch_array($result_members))
{
$id = $row['id'];
$firstname = $row['firstname'];
...
<tr>
<td><? echo "$id"; ?></td>
<td><? echo "$firstname"; ?></td>
...
</tr>
}
我使用jQuery分页,每页显示50行,并在表格中搜索jquery自动填充。
加载和搜索都需要很多时间。从几秒钟到一分钟。我的数据库中有大约5000名成员。
我认为有更好的方法可以做到这一点。我没有mysql的经验,所以如果你能告诉我一个简单的方法让这个工作顺利进行,我真的很开心! :)
此致
Virik
答案 0 :(得分:1)
更改
SELECT * FROM members
到
SELECT * FROM members LIMIT 200
下行是,只允许您显示/搜索前4页用户。如果你想解决这个问题,你需要让jQuery页面动态地请求更多的数据,这会使事情变得更复杂。
很多代码取决于您使用的分页插件。有些插件有integrated support for it,有些插件可能需要入侵。
但是,有一点并没有真正改变的是服务器端的东西。您需要第二个PHP脚本,它只返回给定的结果页面。这是一个。
fetch_page.php
:
<?
define('RESULTS_PER_PAGE', 50);
$page = $_GET['page];
$page = (int) $page; // Cast to int to prevent sql injections and let us do math on it.
$start = $page * RESULTS_PER_PAGE;
$end = ($page + 1) * RESULTS_PER PAGE;
$result_members = mysql_query("SELECT * FROM members LIMIT $start, $end");
while($row = mysql_fetch_array($result_members))
{
$id = $row['id'];
$firstname = $row['firstname'];
...
<tr>
<td><? echo "$id"; ?></td>
<td><? echo "$firstname"; ?></td>
...
</tr>
}
?>
请注意,对此进行搜索是完全不同的事情。有两种方法可以进行搜索:
1)将服务器上的所有数据加载到客户端。这非常慢,特别是因为javascript / DOM实际上不是存储/搜索大量数据的正确方法。但是,它很容易组合在一起。
2)在数据库服务器上进行搜索并将结果返回给客户端。这也很复杂。
您应该考虑这种增加的复杂性是否合理。为什么需要搜索用户表?
答案 1 :(得分:0)
看一下MySQL的LIMIT
子句。你想要做的只是选择你想要的50行。
答案 2 :(得分:0)
可能不仅是数据库相关的减速。它也可能是由您的计算机首先处理HTML,然后是jQuery分页引起的。无论如何,查询5000行并在同一页面上显示它们并不是一个好主意,尽管它们是分页的。
也许您会对flexigrid.info感兴趣 - 这是一个很好的javascript解决方案,可以显示数据库中的数据。它不仅可以根据需要加载数据,还可以进行排序和一些操作(行添加和删除)。