1

我使用这个查询:

$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 Autocomplete 在表中搜索。

加载和搜索都需要大量时间。从几秒到一分钟。我的数据库中有大约 5.000 个成员。

我认为有更好的方法来做到这一点。我对mysql没有经验,所以如果你能告诉我一个简单的方法来使这项工作顺利进行,我会很高兴的!:)

问候

维里克

4

3 回答 3

1

改变

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) 在数据库服务器上进行搜索并将结果返回给客户端。这也相当复杂。

您应该考虑这种增加的复杂性是否合理。为什么需要搜索用户表?

于 2012-08-12T19:33:49.900 回答
0

这可能不仅是与数据库相关的减速。它也可能是由于您的计算机首先处理 HTML,然后是 jQuery 分页造成的。无论如何,查询 5000 行并将它们显示在同一页面上并不是一个好主意,尽管它们是分页的。

也许您会对 flexigrid.info 感兴趣 - 一个很好的 javascript 解决方案,可以显示来自您的数据库的数据。它不仅可以根据需要加载数据,还可以进行排序和一些操作(行添加和删除)。

于 2012-08-12T19:40:28.073 回答
0

看一下 MySQL 的LIMIT子句。您要做的只是选择您想要使用的 50 行。

于 2012-08-12T19:31:40.927 回答