【问题标题】:query using Parse使用 Parse 查询
【发布时间】:2013-09-20 19:35:06
【问题描述】:

我想创建一个查询,如果 2 个字段中存在某些内容,它将检查特定类(我想为每个字段显示 OR 而不是 AND) 这就是我所做的,但它不起作用(基于我看到的一些示例)

    PFQuery *query = [PFQuery queryWithClassName: self.parseClassName];
   [query whereKeyExists:@"name"];  //this is based on whatever query you are trying to accomplish
    [query whereKeyExists:@"city"]; //this is based on whatever query you are trying to accomplish
    [query whereKey:@"description" containsString:searchTerm];

我应该怎么做?

** 我想在我的查询中获取包含所有字段(名称、城市、描述)中的 searchTeam 的所有结果

谢谢

【问题讨论】:

    标签: ios parse-platform pfquery


    【解决方案1】:

    这个问题的答案很简单,只需要对同一个查询对象添加多个whereKey方法调用即可。例如:

       PFQuery *query = [PFQuery queryWithClassName: self.parseClassName];
       [query whereKey:@"name" equal:@"someName"];
       [query whereKey:@"city" equal:@"someCity"];
       [query whereKey:@"description" containsString:searchTerm];
    

    这将评估为原始所需语句。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,您需要检查您的 searchTerm 是否包含名称、城市或描述。这样做的方法是:

      PFQuery * nameQuery = [PFQuery queryWithClassName: self.parseClassName];
      [nameQuery whereKey:"name" containsString:searchTerm];
      PFQuery * cityQuery = [PFQuery queryWithClassName: self.parseClassName];
      [nameQuery whereKey:"city" containsString:searchTerm];
      PFQuery * descriptionQuery = [PFQuery queryWithClassName: self.parseClassName];
      [nameQuery whereKey:"description" containsString:searchTerm];
      
      PFQuery * query = [PFQuery orQueryWithSubqueries:@[nameQuery, cityQuery, descriptionQuery]];
      

      这会从查询数组创建复合或查询。您之前通过向同一查询添加更多约束所做的操作与编写 AND 查询相同。

      IE: keyExists:@"name" AND keyExists:@"city" AND description CONTAINS searchTerm

      【讨论】:

      • 我认为这是不正确的,这与 OR 查询相同(如方法名称所述......)
      • 他之前做的是AND。我写的是 OR。
      【解决方案3】:

      你想要这个:

      NSString *className = @"YourParseClassName";
      NSString *searchTerm = @"YourSearchTerm";
      PFQuery *nameQuery = [PFQuery queryWithClassName:className];
      [nameQuery whereKey:@"name" containsString:searchTerm];
      PFQuery *cityQuery = [PFQuery queryWithClassName:className];
      [cityQuery whereKey:@"city" containsString:searchTerm];
      PFQuery *descriptionQuery = [PFQuery queryWithClassName:className];
      [descriptionQuery whereKey:@"description" containsString:searchTerm];
      
      PFQuery *allQuery = [PFQuery orQueryWithSubqueries:@[nameQuery, cityQuery, descriptionQuery]];
      [allQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
          if (!error) {
              NSLog(@"Found objects: %@", objects);
          } else {
              NSLog(@"Received error: %@", error);
          }
      }];
      

      这样,您可以创建三个单独的查询,然后将它们组合成一个更大的查询以一次返回所有对象。

      但请记住,Parse Regex 搜索非常有限,如果您希望完成大量搜索,这可能不是最具可扩展性的选项。对于轻量级工作或偶尔搜索的应用,这应该没问题。

      【讨论】:

        猜你喜欢
        • 2018-09-19
        • 2023-04-03
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多