我在寫mysql查詢,它正確地獲取信息,但是我不能爲此寫NSPredicate,因爲我不知道如何選擇IN(select)構造。將mysql查詢傳輸到NSPredicate
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,並且如果此行的photoId在albumId實體中找到。在這個例子中,我需要返回第一行。 邏輯:如果albumId = 0,則是album,如果albumId!= 0,則表示該照片屬於1-st相冊。所以我需要返回所有相冊,其中照片數量不爲零。 與這個謂詞,我只返回所有專輯,也沒有照片的專輯。
"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];
如果您描述Photo實體是如何定義的(屬性,關係),這將有所幫助。 –
你定義了什麼*核心數據實體?相片集, ...?他們有什麼屬性? - 請注意,核心數據使用實體之間的關係,而不是ID或外鍵。這可能是因爲你將SQL表「太原始」翻譯成了Core Data。 –
關於照片我只有一個實體,照片和定義的屬性photoId,albumId,即NSNumber,標題和文本。我從服務器獲取照片信息,並且無法更改結構,他們向我發送這樣的信息。 – gronzzz