我正在尝试从我的数据库中解析一些对象。我使用parse.com作为网络服务。 下面的代码根据4个查询返回了一些对象,其中2个是复合的。
变量" meetingAge"必须等于indexAge OR" 6" 变量" meetingSex"必须等于"性别"或" 2" 变量" isAvaiable"必须等于YES 变量" author"必须与user.username
不同基本上我正在尝试使用2 OR条件和2 AND条件实现查询。
以下代码给出了错误的结果,没有异常或类似的东西,只是一种错误的对象。我确定它是一个语法问题,但我无法弄清楚如何正确编写这个..如果我只使用1个复合查询然后添加2个AND查询,我得到了正确的结果,但后来我想念1过滤器..
PFQuery *queryAge1 = [PFQuery queryWithClassName:@"MeetingObject"];
[queryAge1 whereKey:@"meetingAge" equalTo:indexAge ];
PFQuery *queryAge2 = [PFQuery queryWithClassName:@"MeetingObject"];
[queryAge2 whereKey:@"meetingAge" equalTo:@"6"];
PFQuery *queryCompound = [PFQuery orQueryWithSubqueries:@[queryAge1,queryAge2]];
PFQuery *querySex1 = [PFQuery queryWithClassName:@"MeetingObject"];
[querySex1 whereKey:@"meetingSex" equalTo:user[@"sex"]];
PFQuery *querySex2 = [PFQuery queryWithClassName:@"MeetingObject"];
[querySex2 whereKey:@"meetingSex" equalTo:@"2"];
queryCompound = [PFQuery orQueryWithSubqueries:@[querySex1,querySex2]];
[queryCompound whereKey:@"isAvaiable" equalTo:[NSNumber numberWithBool:YES]];
[queryCompound whereKey:@"author" notEqualTo:user.username];
[queryCompound findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
}
答案 0 :(得分:0)
在您的行中queryCompound = [PFQuery orQueryWithSubqueries:@[querySex1,querySex2]];
,您正在创建一个全新的查询,忽略所有年龄段的内容。
修改强>
你这太复杂了。
你可以这样做......
PFQuery *query = [PFQuery queryWithClassName:@"MeetingObject"];
[query whereKey:@"meetingAge" containedIn:@[@"6", indexAge]];
[query whereKey:@"meetingSex" containedIn:@[@"2", user[@"sex"]]];
[query whereKey:@"isAvaiable" equalTo:[NSNumber numberWithBool:YES]];
[query whereKey:@"author" notEqualTo:user.username];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
}
这将捕获您正在寻找的所有选项。
另外,就像快速说明一样。选择变量名称以使其更具可读性。如果它们都以单词query
开头,则很难区分它们。还要使它们具有描述性。 queryAge1
和queryAge2
会让他们更难理解他们在做什么。