从多个表自动完成

Posted

技术标签:

【中文标题】从多个表自动完成【英文标题】:Autocomplete from multiple tables 【发布时间】:2011-06-30 09:24:24 【问题描述】:

我想知道从多个表中获取自动完成结果的最有效方法是什么?

需要注意的是;我希望能够确定记录来自哪个表。

例如,给定这些示例表:

+- People
   +- id
   +- name
   +- age

+- Places
   +- id
   +- name
   +- distance

+- Things
   +- id
   +- name
   +- color

虽然包含一些针对此问题的任意数据,但这里的主要关注点是 name 列(尽管这些可能是其他内容,或者每个正在查询的表有多个)

无论如何,我正在尝试弄清楚如何查询这些表中的每一个以获取自动完成的数据,并返回数据以及它来自哪个表。例如,字母 A 的输出可能如下所示:

Apple (Things)
Amy (People)
Aaron (People)
Anaheim (Places)
Axe (Things)

这最好通过单个查询还是跨多个表的多个查询来完成?

提前致谢:)

【问题讨论】:

【参考方案1】:

您可以在一个查询中使用 at union 来完成:

SELECT name, 'Things' as source FROM Things WHERE name LIKE 'A%'
UNION ALL
SELECT name, 'People' as source FROM People WHERE name LIKE 'A%'
UNION ALL
SELECT name, 'Places' as source FROM Places WHERE name LIKE 'A%'

现在您将获得匹配的 name 和源表,并且您可以为您的自动完成下拉内容很好地格式化。

【讨论】:

太棒了 :) 谢谢克劳斯·拜斯科夫·霍夫曼;我倾向于UNION,但是这个实现让我望而却步。 (我会在 3 分钟内接受) 如果您要处理许多记录,正确的索引和结果缓存是否可以接受查询的执行时间? 这会比只使用一张由所有实体组成的表并只查询一张表更昂贵吗?

以上是关于从多个表自动完成的主要内容,如果未能解决你的问题,请参考以下文章

自动完成搜索框,从结果中选择多个值

JQuery 自动完成 - 显示多个值

Jquery在表的多个单元格上自动完成

使用 jQuery 自动完成返回多个值

JQuery 自动完成:在一个字段中显示同一个 JSON 对象的多个属性

从文本字段捕获数据时如何忽略自动完成值?