我使用此查询:
$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 自动完成在表中搜索。
加载和搜索都需要花费大量时间。从几秒钟到一分钟。我的数据库中大约有 5.000 个成员。
我认为有更好的方法可以做到这一点。我在 mysql 方面没有经验,所以如果你能向我展示一种简单的方法来使这项工作顺利进行,我会非常高兴!:)
问候
维里克
更改
SELECT * FROM members
自
SELECT * FROM members LIMIT 200
缺点是,这只会让您显示/搜索用户的前 4 页。如果你想解决这个问题,你需要让jQuery页面动态请求更多的数据,这使得事情变得更加复杂。
如何添加此功能
很多代码取决于您使用的分页插件。一些插件集成了对它的支持,其他插件可能需要入侵。
但是,没有真正改变的一件事是服务器端的东西。你需要第二个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) 在数据库服务器上执行搜索并将结果返回给客户端。这也相当复杂。
您应该考虑这种增加的复杂性是否合理。为什么需要搜索用户表?
这可能不仅仅是与数据库相关的减速。这也可能是由于您的计算机首先处理 HTML,然后是 jQuery 分页引起的。无论如何,查询 5000 行并将它们显示在同一页面上不是一个好主意,尽管它们是分页的。
也许你会对 flexigrid.info 感兴趣 - 一个很好的javascript解决方案,可以显示数据库中的数据。它不仅可以根据需要加载数据,还可以进行排序和一些操作(行添加和删除)。
看看MySQL的LIMIT
子句。您要做的是仅选择所需的 50 行。