代码之家  ›  专栏  ›  技术社区  ›  Dan Lew

当自动完成与SQL中的多个列匹配时对结果进行排序

  •  0
  • Dan Lew  · 技术社区  · 15 年前

    我遇到了一个我正在处理的自动完成字段的问题。我正在处理的字段由表单组成 "<NAME> (<CODE>)" . 当用户开始键入文本时,我希望显示任何匹配的结果 NAME CODE .

    例如,如果此列表包含项目及其代码,例如“个人计算机(PC)”,那么如果用户键入“p”、“pc”、“per”等,我希望该列表弹出该行。

    我已经在sqlite中通过这样的查询使其正常工作:

    SELECT *
    FROM table
    WHERE name LIKE "?%" or code LIKE "?%"
    

    然而,我现在遇到的问题是如何最好地分类从中得到的结果。例如,如果有人输入“PC”,我希望“个人计算机(PC)”是第一个结果。但是,如果还有另一行(你必须忍受我的人为安排)“PC案例(301)”,那么我无法对结果进行简单的排序,以确保 最好的 匹配首先出现。按名称和代码排序都会首先返回pc case。

    我想要一个首先返回最佳匹配项的查询,而不是按字母顺序返回项。在sqlite中是否有这样一个我可以使用的函数,或者我应该返回结果,然后处理代码中的顺序?

    如果有帮助的话,我会在android上为filterqueryproviders使用它。

    2 回复  |  直到 15 年前
        1
  •  0
  •   David Elizondo    15 年前

    是的,您应该实现 全文检索 及使用 匹配 在您的查询中。
    裁判: http://dotnetperls.com/sqlite-fts3

        2
  •  0
  •   Dan Lew    15 年前

    这是事实发生后的很长一段时间,但我已经解决了我的困境,不必诉诸疯狂的分类策略。

    基本上,一旦自动完成变得足够复杂,就需要实现自己的cursoradapter(实现filterQueryProvider),然后重写convertToString()。这样,您就可以通过runquery()执行复杂的查询,但随后可以在convertToString()中将其转换为可读形式。