gpt4 book ai didi

sql - 实现快速用户界面通配 rune 本搜索 (MS Access) 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 03:13:19 26 4
gpt4 key购买 nike

我希望用户能够使用通配符搜索表中的多个字段。我真正想要的是一种进行通配符搜索的方法,它可以促进公平的用户体验(例如,不笨重;体面的速度;如果不快,那么它可能会在后台处理)。我知道通配符搜索是不受欢迎的;如果没有可行的解决方案,我什至可能会放弃此功能。我想提一下,与寻找具体代码相比,我更多地是在寻找想法。

这是一个例子来展示我到目前为止所做的尝试。考虑这个具有 3 个文本字段的假设表(该表的目的无关紧要):

表格控件

ID     |     Field1     |     Field2     |     Field3    |
1 | jimmy john | waldo johnson | carmen smith |
2 | francis | david smith | NULL |
3 | yvonne | harry t. | mr. waldo |
4 | dr. waldo, md | hal | NULL |

所以我想找到所有包含“waldo”的记录。我的第一个直觉是做这样的事情:

SELECT ID, Field1, Field2, Field3
FROM tableWidget
WHERE ID IN
(
SELECT ID FROM tableWidget WHERE
Field1 LIKE '*waldo*' OR
Field2 LIKE '*waldo*' OR
Field3 LIKE '*waldo*'
)

这里的问题是我运行的记录数量非常慢。我做的第二次尝试是这样的:

SELECT ID, Field1, Field2, Field3
FROM tableWidget
WHERE ID IN
(
SELECT ID FROM tableWidget
WHERE Field1 & Field2 & Field3 LIKE '*waldo*'
)

这仍然很慢。我尝试的第三种方法是让 Form_Timer 事件循环通过 tableWidget 并进行 VBA 比较。我的表单记录集是这样的:

SELECT * FORM tableWidget
WHERE ID IN (SELECT * FROM tempTable)

附加到磁带上的代码片段看起来像这样"

With rsTableWidget
If Searching=True AND NOT .EOF Then

If INSTR(.Fields("Field1") & .Fields("Field2") & ".Fields("Field3"), "waldo") > 0 Then
rsTempTable.AddNew
rsTempTable.Fields("ID")=.Fields("ID")
rsTempTable.Update
mySubForm.Requery
End If

rsTableWidget.MoveNext

Else

Searching=False
rsTableWidget.Close: rsTempTable.Close

End If
End With

这样做的好处是它会在后台更新。这样做的坏处是 Form_Timer 的每次迭代都会闪烁。当它找到一条记录时,mySubForm.requery 方法会重置表单——这对用户来说不是很友好。

我考虑过的其他方法是使用 VBA 代码定期解析每个单词(以空格分隔)并创建一个搜索表:

tableSearchTerm:

ID    |    searchTerm
1 | jimmy
1 | john
1 | waldo
1 | johnson
1 | carmen
1 | smith
2 | francis
2 | david
2 | smith
etc...

我还没有尝试过这个,但我想好处是我可以为 searchTerm 建立索引。而且我不必再使用通配符,因为所有术语都与 ID 相关联。糟糕的是这张 table 很快就会变大!

有没有更好的方法?

最佳答案

您的查询看起来过于复杂,您为什么不使用它呢?

SELECT ID, Field1, Field2, Field3
FROM tableWidget
WHERE
Field1 LIKE '*waldo*' OR
Field2 LIKE '*waldo*' OR
Field3 LIKE '*waldo*'

但是,是的,在搜索词的开头处使用通配符进行全文搜索会很慢,因为无法使用索引。

您可能希望迁移到具有全文搜索功能的服务器数据库作为后端。例如。 SQL Server .

此问答说它也适用于 Express 版本:Express with Advanced Services, can't create Full Text Index

如果那不是一个选项,我建议让用户选择

  • 搜索字段的开头(Field1 LIKE 'waldo*'),如果您对字段进行索引会更快,或者
  • 进行缓慢的全文搜索。

这取决于您的数据。例如,对于名称,第一个选项几乎总是足够的。

关于sql - 实现快速用户界面通配 rune 本搜索 (MS Access) 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38662768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com