用php列表加速jquery自动完成

时间:2012-09-11 21:02:37

标签: php jquery mysql autocomplete

嗨,我遇到了一个问题。我已经实现了jquerys着名的自动完成功能,我正在从数据库创建一个列表(很长)以输出到自动完成功能。但是在列表中找到正确的值需要很长时间。有谁知道我可以加快这一点的方式???这是我的jquery:

<script>
    $(function() {function log( message ) {$( "#destId" ).val( message );}
        $( "#destinations" ).autocomplete({
            source: "destinos.php",
            minLength: 2,
            select: function( event, ui ) {
                log( ui.item ?
                    "" + ui.item.id :
                    "" + this.value );}});});
    </script>

这是destinos.php:

//connect to database
include 'php/dbconn.php';
$term = trim(strip_tags($_GET['term']));//retrieve the search term that autocomplete sends

$qstring = "SELECT Destination as value, DestinationId as id FROM DestinationId WHERE Destination LIKE '%".$term."%'";
//query the database for entries containing the term
    $result = mysql_query($qstring);
//loop through the retrieved values   
    while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
    {
            $row['value']=htmlentities(stripslashes($row['value']));
            $row['id']=htmlentities(stripslashes($row['id']));
            $row_set[] = $row;//build an array
    }
    echo json_encode($row_set);//format the array into json data

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

您很可能需要加快数据库查询速度。你必须要做几件事。

  1. 确保您的Destination字段中包含索引。
  2. 除非绝对必须从字符串的中间匹配,否则从LIKE查询中删除前导%以启用索引。 MySQL无法有效地使用带有前导通配符的索引。
  3. 如果您必须离开前导%,请在您的jQuery中将minLength设置为3。这将允许MySQL在模式上使用优化算法。
  4. 来源:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

答案 1 :(得分:1)

我会开始关注数据库方面的问题。

首先,您需要确保在Destination上有索引。

其次,你应该考虑使用LIMIT,比如10或20行。在自动填充中,在大多数情况下,您不需要一次显示那么多结果。当用户继续相当快速地输入时,匹配计数将减少。

第三,在查询$term变量之前,你应该使用正确的mysql转义。

其余的看起来非常简单。