【问题标题】:SQLite ordering that puts prefix matches first将前缀匹配放在首位的 SQLite 排序
【发布时间】:2013-04-17 18:59:26
【问题描述】:

我想知道如何制定一个 SQLite ORDER 作为它的第一个标准,它将根据搜索字符串是否匹配列的前缀或中缀来分隔匹配项。第二个排序是简单的 ASC。

例如搜索“st”并简单地按该列排序将产生:

  • 天体物理学家
  • 贝克街
  • 尤达大师
  • 堆栈溢出
  • 星际迷航
  • 剑龙
  • 系统冲击
  • 韦斯特伍德

我想这样订购:

  • 堆栈溢出
  • 星际迷航
  • 剑龙
  • 天体物理学家
  • 贝克街
  • 尤达大师
  • 系统冲击
  • 韦斯特伍德

所以前缀匹配首先出现,然后是其余的。二级排序就是 ASC。

感谢您的任何意见。

【问题讨论】:

    标签: sqlite android-sqlite


    【解决方案1】:

    假设您有一个名为 Products 的表,让我们简单说明一下,它只有一个名为 Productname 的字段。并且您想搜索以单词 Co 开头或中间有单词 Co 的产品名称。

    所以,查询应该是这样的:

    SELECT Productname FROM Products
    WHERE Productname LIKE 'Co%'
    UNION ALL
    SELECT Productname FROM (
    SELECT Productname FROM Products
    WHERE Productname LIKE '%Co%'
    ORDER BY Productname) B
    

    那么,如果你有以下记录

    Coco Crunch
    Lucky Cow
    Coffee
    Sweet Corn
    Cookies
    Corn Puff
    

    现在会变成这样

    Coco Crunch
    Coffee
    Cookies
    Corn Puff
    Lucky Cow
    Sweet Corn
    

    用您自己的字段和表格尝试一下。

    【讨论】:

    • 感谢您的指点。但是,这不会过滤掉任何根本不包含搜索字符串的记录。但是使用您的示例我可能会自己工作。
    • @Chris 我对其进行了编辑,希望它现在可以满足您的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多