【问题标题】:How to do a custom sort of SQL data using Cursor & Loader?如何使用 Cursor & Loader 进行自定义排序的 SQL 数据?
【发布时间】:2013-09-04 05:04:17
【问题描述】:

我在 SQLite 数据库中有一些数据,我想在列表视图中提供基本的搜索功能。

这是我希望能够解决的搜索查询示例:

1) sqlite 数据示例:

  • 广告
  • 公元前
  • 光盘
  • d
  • ec

2) 输入和想要的输出:

  • a -> [ ad , da ]​​i>
  • d -> [ d , da , ad , cd ]​​i>
  • c -> [ cd, bc , ec ]​​i>

我已经想到了一些事情,但没有什么真正好的:

  1. 全文搜索:我无法修改输入 db 文件,所以我认为我无法使用它
  2. 一个 sqlite 查询 (name LIKE ?% OR name LIKE %?%):未排序。也许可以找出另一个我不知道的查询
  3. 两个不同的查询(name LIKE ?% 然后name LIKE %?%):但是如何用内容提供者来实现呢?游标包装?合并光标?自定义加载器?

我看过很多示例,但对我的自定义搜索没有任何用处。

感谢您的帮助。

编辑:d 的查询应该给出 [d , da , ad , cd ]。

我想要的自定义排序顺序是:LIKE pattern% 然后 LIKE %pattern%(例如 socks 应该在 a pair of socks 之前)

【问题讨论】:

  • SELECT name FROM items WHERE name LIKE '%a%' 不起作用?
  • d输入结果不应该是[d, ad, cd, da]?
  • @user1759572 1) 它不对结果进行排名(d 不在广告之前)。 2)你是对的
  • 您希望如何对它们进行排名?按分贝的顺序?您可能需要对名称列进行全文搜索查询吗?
  • @user1759572 我添加了一些细节。我可以在不修改数据库的情况下使用 FTS 吗?

标签: android sqlite android-contentprovider android-cursor android-loader


【解决方案1】:

以下是满足您要求的一些技巧:

SELECT DISTINCT t.name
FROM (select *, 1 as sec from items WHERE name LIKE 'd%'
union
select *, 2 as sec from items WHERE name LIKE '%d%') as t 
ORDER BY t.sec ASC

【讨论】:

  • 谢谢。我会试试的。
【解决方案2】:

CursorLoader constructor 的最后一个参数是sortOrder - 添加name 列作为您的sortOrder 以对结果集进行排序(请注意,将其留空,因为SQLiteDatabase.query 可能导致未排序的顺序) .

【讨论】:

  • 谢谢,但我想要一个自定义订单:例如,sockspair of socks 之前
猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2017-01-16
  • 2019-01-10
  • 2022-07-11
相关资源
最近更新 更多