这是我的核心数据模型:
Conference
==========
name
events (to-many relationship to Event object)
Event
======
date
type (int - private=0, public=1)
conference (to-one relationship to Conference object)因此,会议可以有许多活动,而事件只有一个会议:
Conference <------>> Event我有一个复杂的抓取,我不知道如何做,这是我需要的:
三个最重要的会议,最公开的活动和满足的基本条件,意思是:
我不确定是应该直接查询Conference对象还是查询Event对象,而不是使用event.conference筛选适当的会议
效率很重要,因此,如果可能的话,可以使用获取限制或其他优化。
发布于 2014-02-23 18:22:23
您可以使用SUBQUERY在单个提取请求中执行此操作:
NSDateComponents* components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]];
[components setDay:[components day] - 10];
NSDate* tenDaysAgo = [[NSCalendar currentCalendar] dateFromComponents:components];
NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Conference class])];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(events, $event, $event.type = 0 AND $event.date > %@).@count >= 1 AND SUBQUERY(events, $event, $event.type = 1 AND $event.date > %@).@count >= 5", tenDaysAgo, tenDaysAgo];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"events.count" ascending:NO];
fetchRequest.fetchLimit = 3; 注意到:events.count的排序描述符只适用于内存中的存储或二进制存储,但对于SQLite存储则会崩溃(更多关于它的here)。在这种情况下,您应该在获取之后对结果进行排序和限制。
https://stackoverflow.com/questions/21968032
复制相似问题