- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望用户能够使用通配符搜索表中的多个字段。我真正想要的是一种进行通配符搜索的方法,它可以促进公平的用户体验(例如,不笨重;体面的速度;如果不快,那么它可能会在后台处理)。我知道通配符搜索是不受欢迎的;如果没有可行的解决方案,我什至可能会放弃此功能。我想提一下,与寻找具体代码相比,我更多地是在寻找想法。
这是一个例子来展示我到目前为止所做的尝试。考虑这个具有 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/
小米米家智能破壁料理机现已开启预售,这款产品支持破壁熬煮、冷热双打,到手价 379 元。 IT之家了解到,米家智能破壁料理机支持破壁、研磨、碎冰、榨汁、冷热双打。热饮最大容量 1200ml,冷
我是一名优秀的程序员,十分优秀!