嗨,我遇到了一个问题。我已经实现了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
非常感谢任何帮助!
答案 0 :(得分:3)
您很可能需要加快数据库查询速度。你必须要做几件事。
Destination
字段中包含索引。%
以启用索引。 MySQL无法有效地使用带有前导通配符的索引。%
,请在您的jQuery中将minLength
设置为3。这将允许MySQL在模式上使用优化算法。来源:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
答案 1 :(得分:1)
我会开始关注数据库方面的问题。
首先,您需要确保在Destination
上有索引。
其次,你应该考虑使用LIMIT
,比如10或20行。在自动填充中,在大多数情况下,您不需要一次显示那么多结果。当用户继续相当快速地输入时,匹配计数将减少。
第三,在查询$term
变量之前,你应该使用正确的mysql转义。
其余的看起来非常简单。