在 queryForTable() 中解析查询多个键 swift

Parse query multiple key swift in queryForTable()

我使用 Parse 来管理我的数据库。

我有一个带搜索栏的 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)

但是这段代码是正常的:"I want searchBar.text IN prenom AND nom" 那不是我想要的。 我想搜索示例:"John",结果必须是 "john" in "prenom" 或 "nom".

我不知道如何 return 一个带有多个键的 PFQuery 到查询中。

有人有想法吗?

要在 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 字段中都有搜索文本),所以你应该检查一下。

我最后做的是在我的 table 中创建另一个列并连接我所有的可搜索信息。

然后我也这样做,我在此列中搜索我的 searchBar.text,使用 containsString.

它几乎完美地工作,我发现的唯一问题是我是否想在我的新列中以相反的顺序搜索字符串。