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

时间:2015-07-20 21:42:09

标签: swift uitableview parse-platform uisearchbar

我使用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",这个结果必须是" john" in" prenom"或者在" nom"。

我不知道如何将带有多个密钥的PFQuery返回到查询中。

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

要在Parse中执行OR查询,您需要使用Compound Query功能。您构建了两个独立查询,然后使用orQueryWithSubqueries上的PFQuery方法。以你的例子......

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

答案 1 :(得分:0)

我最终做的是在我的表格中创建另一列并连接所有可搜索的信息。

然后我也这样做,我用containsString搜索我的searchBar.text。

它的工作方式几乎完美,我发现的唯一问题是如果我想在新列中按字符串的相反顺序进行搜索。