首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索查询词不应是数据库中任何数据的前缀

搜索查询词不应是数据库中任何数据的前缀
EN

Stack Overflow用户
提问于 2020-05-27 12:21:09
回答 1查看 47关注 0票数 0

如果给一个表User_DNA和一个列一个sequence,我想编写一个查询,如果sequence列中的数据与搜索查询词匹配或者是搜索查询词的前缀,那么它应该返回一个item User_DNA或true。例如,

sequence

霍尔

破伤风免疫球蛋白

如果我的搜索查询是doga (在db中以dog作为前缀),horrible(在db中以hor作为前缀),tiger(在db中以tig作为前缀),caterpillar(在db中以cat作为前缀),查询应该返回true,因为所有这些搜索查询在数据库中都有前缀。

我的sql search查询应该是什么?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-05-27 16:12:23

如果你使用Room,你可以尝试这样(使用Kotlin):

代码语言:javascript
复制
@Query("select * from User_DNA WHERE sequence LIKE :search")
fun getItem(search: String): UserDNA?

将您的狗搜索参数设置为此方法,您应该将搜索模式设置为“您的搜索字符串%”,例如:“%”

如果我的搜索查询是dog,则查询应返回true或其中一项(dogsequence/doggysequence),以有效者为准

您可以检查查询的结果-如果结果为null,则表示您的列中没有匹配值。

已更新

如果你想用“可怕的”来找"hor“,我可以提出下一种方法(也许这是RegExp的一个任务,但说实话,我还没有在房间里用过它):

  1. 你可以在你的DAO中放置两个方法。一种方法是辅助的,它的任务是用我们想要找到的单词填充一个列表。例如,对于“可怕”模式,该方法应该使用{“可怕”,"horrib",“the”,"horri","horr“准备列表,"hor"}.
  2. Second方法应该从SQLite获取结果,其中您的字段保存在step1上准备的列表中的值。此方法应使用房间annotation.
  3. So注释。first方法准备列表,调用用于在SQLite中搜索单词的查询,并将其返回给ViewModel (或Repository).

如下所示:

代码语言:javascript
复制
@Query("select * from User_DNA WHERE sequence IN (:search) ORDER BY sequence")
fun getItem(search: List<String>): User_DNA?

fun findItem(search: String): User_DNA? {
    val searchList = mutableListOf<String>()
    val minimalStringLength = 2 // it's up to you, maybe 1?
    while (search.length > minimalStringLength) {
        searchList.add(search)
        search = search.dropLast(1)
    }
    return getItem(searchList.toList())
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62035396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档