【问题标题】:How do you use autocomplete for thousands of entries?您如何为数千个条目使用自动完成功能?
【发布时间】:2011-03-07 13:44:12
【问题描述】:

有没有办法在 PHP/jQuery 中设置自动完成功能,可以快速遍历数据库中的数千行?

我有一个工作板,用户可以在其中进入他/她的大学 - 我想提供自动完成功能。问题是,美国有 4,500 所大学,这似乎是一个糟糕的解决方案。

有没有一种好方法既可以加快查询速度,又可以仅在可用选项少于 10 个时返回结果?

提前谢谢你, 沃克

【问题讨论】:

  • 只需对 SQL 查询使用 LIMIT。我认为没有理由显示超过 10 个可能的结果。 4,500 行在数据库方面实际上并不是一个很大的数字。
  • 正如拜伦所说,只是限制查询结果。 4500并不多
  • 我认为 LIMIT 是用于指定数据库中的范围?这如何适用于这个问题(对不起新手问题)。
  • 是的,LIMIT 只是告诉数据库返回前 n 条记录。其余的不考虑在内。

标签: php jquery sql codeigniter autocomplete


【解决方案1】:

我同意 Anax 的观点。您可能想查看一个简单的解决方案,例如新的jQuery UI Autocomplete field

使用 delay 和 minLength 选项,您可以在用户输入三个字符之前阻止脚本查询服务器,这将减少结果的数量。

附言。还有一个可能有用的缓存选项。您可以在客户端缓存整个列表,从而减少对数据库的调用。

【讨论】:

  • + 1 新的 jQuery UI 自动完成是最好的。
【解决方案2】:

考虑到记录的数量,最好的选择是使用 AJAX。基本上,您需要监控击键并调用 PHP 脚本,然后从数据库中获取相关记录。

dhtmlxCombo 就是一个很好的例子。

【讨论】:

  • 这比查询所有结果并将它们存储在数组中更聪明吗?每次按下一个字母时查询数据库的强度是否降低/速度更快?
  • 我相信是的。我已经在一个项目中实现了 jQuery 组合框,我正在从一个 10k+ 记录长的表中提取结果。我不敢一次拉所有记录,让用户下载一个巨大的 html 文档。
【解决方案3】:

您可以先询问其他限定词,例如“期望的地区/州”、“专业”等,然后在用户输入 6 个或更多字符后开始自动完成以过滤掉 4,500 所大学中的更多?

【讨论】:

  • 我投了赞成票,因为自动完成的概念面向未来。随着数据集的扩展,您将需要采取措施为应用程序的用户定制建议。这是我们通过地理位置、用户个人资料数据和搜索历史所做的事情。
【解决方案4】:

4500 并不算多,取决于您的硬件/用户数量/您真正需要它的频率,您可以将列表保留在内存中(例如MySQL Memory engine)。
但是,正如已经建议的那样,仅当有 3 个字母+ 时才获得结果时,您甚至可能根本没有问题。

【讨论】:

  • 除了美国可能有超过一半的学生就读于名为“[州名]大学”的大学
  • 如果有很多以相同名称开头的结果,记录和硬编码某些内容可能是一种解决方案(如果搜索是 uni* 的一部分,则返回“University of”,并且仅在以下情况下进行真正的搜索有一些可评估的数据,类似的东西)---并且,根据人们使用表格的方式,将最后的结果保存在内存中可能也会有所帮助(APC)。再次检查日志是否对每个案例有用..
  • 感谢您的洞察力,我很感激。
【解决方案5】:
猜你喜欢
  • 2020-02-14
  • 2022-08-15
  • 2015-06-20
  • 2015-09-13
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
相关资源
最近更新 更多