Я пишу mysql-запрос, который получает информацию правильно, но я не могу написать NSPredicate для этого, потому что я не знаю, как выбрать IN (select) construction.Перенести mysql-запрос в NSPredicate
SELECT * FROM ZPHOTO WHERE ZPHOTOID IN (SELECT ZALBUMID FROM ZPHOTO) AND ZALBUMID = 0;
Я беру все строки, где albumID = 0, и если albumID содержит этот идентификатор фотографии.
и часть моего NSPredicate:
NSEntityDescription *entity = [NSEntityDescription entityForName:[NSString stringWithFormat:@"%@",name] inManagedObjectContext:context];
etchRequest.predicate = [NSPredicate predicateWithFormat:@"photoId IN"]
ОБНОВЛЕНО: Логика: Существует таблица: screenshot here. Мне нужно вернуть строку, где albumId = 0, и если для этой строки найдено фотоид в объекте albumId. В этом примере мне нужна первая строка. Логика: если albumId = 0, это альбом, если albumId! = 0, значит, эта фотография принадлежит 1-му фотоальбому. Поэтому мне нужно вернуть все альбомы, где количество фотографий не равно нулю. с этим предикатом, я только возвращаю все альбомы, а также альбомы без фотографий.
"albumId = 0"
Так что мне нужно отфильтровывать альбомы без фотографий. пожалуйста, помогите мне
ОБНОВЛЕНО 2:
возвращает строк без фотографий, я думаю, что проблема с (PHOTOID В% @), я думаю, что он нашел в ЗПК, а не в 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];
Это поможет, если вы опишете, как определяется объект Photo (атрибуты, отношения). –
Что * Объекты Core Data * вы определили? Фотоальбом, ...? Какие у них есть свойства? - Обратите внимание, что Core Data использует отношения между объектами, а не идентификаторы или внешние ключи. Возможно, вы перевели таблицы SQL «слишком дословно» в Core Data. –
О фотографии У меня есть только одна сущность, фото и определенные свойства photoId, albumId, то есть NSNumber, название и текст. Я получаю информацию о фото с сервера и не могу изменить структуру, они отправляют мне такую информацию. – gronzzz