自动完成匹配SQL中的多个列时的排序结果
我遇到了一个我正在处理的自动完成字段的问题。我正在使用的字段由表单自动完成匹配SQL中的多个列时的排序结果,sql,android,sqlite,autocomplete,Sql,Android,Sqlite,Autocomplete,我遇到了一个我正在处理的自动完成字段的问题。我正在使用的字段由表单“()”组成。当用户开始键入文本时,我希望显示与NAME或code匹配的任何结果 例如,如果此列表包含项目及其代码,如“个人计算机(PC)”,则如果用户键入“p”、“PC”、“Per”等,我希望该列表弹出该行 我已经在SQLite中使用了如下查询: SELECT * FROM table WHERE name LIKE "?%" or code LIKE "?%" 然而,我现在遇到的问题是如何最好地对从中得到的结果进行排序。例如
“()”
组成。当用户开始键入文本时,我希望显示与NAME
或code
匹配的任何结果
例如,如果此列表包含项目及其代码,如“个人计算机(PC)”,则如果用户键入“p”、“PC”、“Per”等,我希望该列表弹出该行
我已经在SQLite中使用了如下查询:
SELECT *
FROM table
WHERE name LIKE "?%" or code LIKE "?%"
然而,我现在遇到的问题是如何最好地对从中得到的结果进行排序。例如,如果有人输入“PC”,我希望“个人电脑(PC)”是第一个结果。然而,如果有另一行(你必须忍受我,因为这是人为的)“PC案例(301)”,那么我无法对结果进行简单排序,以确保首先出现最佳匹配。按名称和代码排序都会首先返回PC案例
我希望查询首先返回最佳匹配项,而不是按字母顺序返回项目。我是否可以在SQLite中使用这样的函数来实现这一点,或者我应该返回结果,然后扰乱代码中的顺序
如果有帮助的话,我正在Android上为FilterQueryProviders使用它。是的,您应该在查询中实现FullTextSearch并使用匹配。
参考文献:这是一个很长的时间后的事实,但我已经解决了我的困境,而不必诉诸疯狂的排序策略
基本上,一旦自动完成变得足够复杂,您就需要实现自己的游标适配器(实现FilterQueryProvider),然后重写convertToString()。这样,最终可以通过RunQuices()来执行复杂的查询,但是它可以将它转换成CurrttoStRew()的可读窗体。我不知道这对我的情况有什么帮助,因为这是排序问题,而不是匹配问题。您可能需要考虑切换到全文搜索和使用排序。