首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在大型数据库中使用typeahead.js

如何在大型数据库中使用typeahead.js
EN

Stack Overflow用户
提问于 2013-08-06 23:29:41
回答 1查看 35.1K关注 0票数 25

我有一个包含10,000个地址和5,000人的大型数据库。

我想让用户在数据库中搜索地址或用户。我想在输入文本时使用Twitter的typeahead来建议结果。

请看NBA的例子:http://twitter.github.io/typeahead.js/examples

我知道,从速度和负载的角度来看,预取15,000个项目并不是最优的。尝试实现这一目标的更好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-07 17:49:17

既然没有人回答,我就继续提出我的建议。

我认为最适合您的大型数据库的是结合使用remotetypeahead.js。快速示例:

代码语言:javascript
复制
$('#user-search').typeahead({
    name: 'user-search',
    remote: '/search.php?query=%QUERY' // you can change anything but %QUERY
});

它所做的是,当您在input#user-search中键入字符时,它将向页面search.php发送AJAX请求,并将查询作为输入内容。

search.php上,您可以捕获此查询并在数据库中查找它:

代码语言:javascript
复制
$query = $_GET['query'].'%'; // add % for LIKE query later

// do query
$stmt = $dbh->prepare('SELECT username FROM users WHERE username LIKE = :query');
$stmt->bindParam(':query', $query, PDO::PARAM_STR);
$stmt->execute();

// populate results
$results = array();
foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $row) {
    $results[] = $row;
}

// and return to typeahead
return json_encode($results);

当然,由于你的数据库相当大,你应该优化你的SQL查询,以更快地查询,也许缓存结果,等等。

在typeahead端,为了减少查询DB的负载,可以指定minLengthlimit

代码语言:javascript
复制
$('#user-search').typeahead({
    name: 'user-search',
    remote: '/search.php?query=%QUERY',
    minLength: 3, // send AJAX request only after user type in at least 3 characters
    limit: 10 // limit to show only 10 results
});

所以你的数据库有多大并不重要,这种方法应该工作得很好。

这是一个用PHP编写的示例,当然,对于任何后端,它都应该是相同的。希望你能掌握基本的概念。

票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18084408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档