gpt4 book ai didi

ios - 组合条件查询不能正常工作?

转载 作者:行者123 更新时间:2023-11-29 10:43:09 25 4
gpt4 key购买 nike

我需要使用 parse.com 方法 orQueryWithSubquerries: 来创建组合条件查询。

这是我的代码:

PFQuery *testQuery = [PFUser query];
[testQuery whereKey:@"displayName notEqualTo:@"Bob"];

PFQuery *testQuery2 = [PFUser query];
[testQuery whereKey:@"username" notEqualTo:@"frank"];

PFQuery *orQuery = [PFQuery orQueryWithSubqueries:@[testQuery, testQuery2]];
[orQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
if (!error) {
PFUser *user = [users firstObject];
}
}];

代码运行良好,但它返回了我所有的用户对象,包括应该从 2 个查询中过滤掉的对象。我使用这种方法是错误的,还是我需要以某种方式使用它?

编辑:

我也尝试过完全使用这种方法like how this parse.com example does , 但它仍然无法正常工作。

PFQuery *testQuery = [PFUser query];
[testQuery whereKey:@"numberOfPhotos" greaterThan:@(3)];

PFQuery *testQuery2 = [PFUser query];
[testQuery whereKey:@"numberOfPhotos" lessThan:@(1)];

PFQuery *orQuery = [PFQuery orQueryWithSubqueries:@[testQuery, testQuery2]];
[orQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
if (!error) {
// users still contains every user in the app even though it shouldn't according to the parse example
}
}];

最佳答案

不需要复合查询,定时查询即可:

PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"displayName" notEqualTo:@"Bob"];
[userQuery whereKey:@"username" notEqualTo:@"frank"];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
if (!error) {
PFUser *user = [users firstObject];
}
}];

您混淆了复合查询的使用,就像您目前使用的那样,

TestQuery = 显示不是 bob 的所有用户。 (包括用户名为 frank 的用户)

TestQuery2 = 用户名不是 frank 的所有用户。 (包括显示名称为 Bob 的用户)

当你组合它们时,你会得到所有的用户,你的组合是矛盾的。

基本上,query1 中遗漏的所有用户都包含在 query2 中。并且,query2 中遗漏的所有用户都包含在 query1 中。当您组合这些查询时,它们会填补缺失的空间,您将获得所有用户。

更新

如果您尝试使用 hasPrefix,它似乎应该可以正常工作:

NSString * prefixToSearch = ...;

PFQuery * displayNameQuery = [PFUser query];
[displayNameQuery whereKey:@"displayName" hasPrefix:prefixToSearch];

PFQuery * usernameQuery = [PFUser query];
[usernameQuery whereKey:@"username" hasPrefix:prefixToSearch];

PFQuery * compoundQuery = [PFQuery orQueryWithSubqueries:@[displayNameQuery, usernameQuery]];
[orQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
if (!error) {
NSLog(@"Found %i users", users.count);
}
}];

更新 2 - 让我们测试一下

PFQuery *testQuery = [PFUser query];
[testQuery whereKey:@"numberOfPhotos" greaterThan:@(3)];

PFQuery *testQuery2 = [PFUser query];
[testQuery whereKey:@"numberOfPhotos" lessThan:@(1)];

PFQuery *orQuery = [PFQuery orQueryWithSubqueries:@[testQuery, testQuery2]];
[orQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
if (!error) {
// users still contains every user in the app even though it shouldn't according to the parse example

for (PFUser * user in users) {
int numberOfPhotos = [user[@"numberOfPhotos"] intValue];
if (1 <= numberOfPhotos && numberOfPhotos <= 3) {
NSLog(@"Query is failing");
}
}

}
}];

更新 3 - 谓词!

通过我们的谈话,我们得到了它与这个一起工作:

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"keyOne BEGINSWITH 'z' OR keyTwo BEGINSWITH 'a'"]; 
PFQuery * userQuery = [PFQuery queryWithClassName:@"_User" predicate:predicate];
[userQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
NSLog(@"Found objects: %@", objects);
}];

关于ios - 组合条件查询不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com