我在 MySQL 数据库的“地址”表中有地址。该表包含地址 ID 列和地址相关列的常见分类 - 名称、第 1 行、第 2 行、郊区、州、邮政编码等。许多字段允许 NULL。
这用于客户端基于 Web 的界面 - 用户可以通过在文本框中键入地址的任何部分来从表中查找和选择地址。匹配被显示并且用户可以选择一个。
文本框中的术语被视为以空格分隔的一系列搜索术语,并且每个术语都必须出现在任何地址字段中才能显示以供选择。
为此,我在几种实现方法之间纠结:
目前的方法:
- 在页面加载时,异步 HTTP 请求(“AJAX”)用于检索格式良好的列表中的所有地址(所有字段组合成一行,占空白字段)。
- 每当文本框接收到输入时,jQuery 用于在此列表中查找和显示匹配项。
这种方法的好处是只需要发送一个简单的查询,并且在输入搜索字段和查看响应之间没有延迟,因为搜索是在客户端完成的(尽管这可能无法很好地扩展 - 见下文) . 它还避免了对复杂 SQL 搜索的需要(我并不反对,我只是想实现一些东西作为概念证明,而且这种方法更快)。
缺点当然是页面加载时必须检索每个地址,并且数据库最终可能会存储数千个地址。
另一种方法是每当用户在文本框中键入时发送 HTTP 请求,这将返回与使用 SQL 搜索表匹配的地址。需要更多的请求和更大的延迟,但每次只需要检索和传输一个地址子集。我可以根据需要轻松调整最小任期长度和轮询频率。
我想知道实现此 SQL 方面的最佳方法...
我最好创建一个连接所有可搜索地址列的视图,并使用带有 WHERE 子句的查询,如“concatcolumn LIKE '%term1%' AND concatcolumn LIKE '%term2%' AND concatcolumn LIKE '%termN%' “?
任何想法或建议将不胜感激。