我正在编写mysql查询,它可以正确获取信息,但我无法为此编写NSPredicate,因为我不知道如何选择IN(选择)构造。
SELECT * FROM ZPHOTO WHERE ZPHOTOID IN (SELECT ZALBUMID FROM ZPHOTO) AND ZALBUMID = 0;
我获取所有行,其中 albumID = 0,并且 albumID 包含此 photoID 。
以及我的 nspredicate 的一部分:
NSEntityDescription *entity = [NSEntityDescription entityForName:[NSString stringWithFormat:@"%@",name] inManagedObjectContext:context];
etchRequest.predicate = [NSPredicate predicateWithFormat:@"photoId IN"]
更新: 逻辑: 有一张表:screenshot here 。我需要返回一个 albumId = 0 的行,并且如果在 albumId 实体中找到该行的 photoId。在这个例子中我需要返回第一行。 逻辑:如果albumId = 0,则为相册,如果albumId != 0,则表示该照片属于第一相册。所以我需要返回所有相册,其中照片数量不为零。 使用这个谓词,我只返回所有相册,也返回没有照片的相册。
"albumId = 0"
所以我需要过滤没有照片的相册。 请帮助我
更新2:
返回没有照片的任何行,我认为 (photoId IN %@) 有问题,我认为他在 ZPK 中找到,而不是在 albumId 实体中找到。
NSFetchRequest *fr = [[NSFetchRequest alloc]init];
fr.predicate = [NSPredicate predicateWithFormat:@"albumId != %i",statSubId]; // != 0
[fr setEntity:entity];
NSError *error;
NSArray *albumIds = [context executeFetchRequest:fr error:&error];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]initWithKey:@"photoId" ascending:YES];
[fr setSortDescriptors:[NSArray arrayWithObject:sort]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"photoId IN %@ AND albumId == %i", albumIds,statSubId];
更新3
这似乎是一个正常工作的解决方案。谢谢你们!
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"albumId != %i",statSubId]; // != 0
NSError *error;
NSArray *albumIds = [context executeFetchRequest:fetchRequest error:&error];
NSMutableArray *albId = [NSMutableArray array];
for (Photo *photo in albumIds) {
[albId addObject:photo.albumId];
}
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"photoId IN %@ AND albumId == %i", albId,statSubId];
最佳答案
我认为没有办法通过单个核心数据获取请求来实现这一目标。 您必须分两步执行此操作:
- 获取所有带有
albumId != 0
的对象,并将生成的 ID 存储在数组albumIds
中。 使用谓词
[NSPredicate predicateWithFormat:@"albumId == 0 AND photoId IN %@", albumIds]
获得您想要的结果。
关于ios - 将 mysql 查询转移到 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17648892/