在 queryForTable() 中快速解析查询多个键
Posted
技术标签:
【中文标题】在 queryForTable() 中快速解析查询多个键【英文标题】:Parse query multiple key swift in queryForTable() 【发布时间】:2015-07-20 21:42:08 【问题描述】:我使用 Parse 来管理我的数据库。
我有一个带有 searchBar 的 tableView。 效果很好。
我的查询功能如下:
override func queryForTable() -> PFQuery
var query = PFQuery(className: "students")
if searchBar.text != ""
query.whereKey("prenom", containsString: searchBar.text.uppercaseString)
query.orderByAscending("prenom")
return query
这很好用。
但现在我想在我的研究中添加多个键,例如:
query.whereKey("prenom", containsString: searchBar.text.uppercaseString)
query.whereKey("nom", containsString: searchBar.text.uppercaseString)
但是这段代码是正常的:“我想要 searchBar.text IN prenom AND nom” 这不是我想要的。 我想搜索示例:“John”,这个结果必须是“prenom”中的“john”或“nom”中的“john”。
我不知道如何将带有多个键的 PFQuery 返回到查询中。
有人有想法吗?
【问题讨论】:
【参考方案1】:要在 Parse 中执行 OR
查询,您需要使用 Compound Query 功能。您构造两个独立的查询,然后在PFQuery
上使用orQueryWithSubqueries
方法。以您为例...
override func queryForTable() -> PFQuery
var query: PFQuery!
if searchBar.text != ""
var prenomQuery = PFQuery(className: "students")
var nomQuery = PFQuery(className: "students")
prenomQuery.whereKey("prenom", containsString: searchBar.text.uppercaseString)
nomQuery.whereKey("nom", containsString: searchBar.text.uppercaseString)
query = PFQuery.orQueryWithSubqueries([prenomQuery, nomQuery])
else
query = PFQuery(className: "students")
query.orderByAscending("prenom")
return query
我不记得结果集是否是唯一的(假设有人在他们的 nom 和 prenom 字段中都有搜索文本),所以你应该检查一下。
【讨论】:
它适用于我的要求!如果我想使用多个关键字进行搜索,例如我想搜索 "Sarah Crosh" (firstname, lastname) 怎么办?所以我需要为每个单词创建查询... 您需要在查询中添加额外的 where 约束,例如query.whereKey("firstname", equalTo: "Sarah")
然后 query.whereKey("lastname", equalTo: "Crosh")
【参考方案2】:
我最后做的是在我的表中创建另一列并连接我所有可搜索的信息。
然后我做同样的事情,我在这个列中搜索我的 searchBar.text,包含字符串。
它工作得几乎完美,我发现的唯一问题是如果我想在我的新列中以字符串的相反顺序搜索。
【讨论】:
以上是关于在 queryForTable() 中快速解析查询多个键的主要内容,如果未能解决你的问题,请参考以下文章