首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心数据.复杂的获取

核心数据.复杂的获取
EN

Stack Overflow用户
提问于 2014-02-23 12:11:55
回答 1查看 270关注 0票数 1

这是我的核心数据模型:

代码语言:javascript
复制
Conference
==========
name

events (to-many relationship to Event object)

Event
======
date
type (int - private=0, public=1)

conference (to-one relationship to Conference object)

因此,会议可以有许多活动,而事件只有一个会议:

代码语言:javascript
复制
Conference <------>> Event

我有一个复杂的抓取,我不知道如何做,这是我需要的:

三个最重要的会议,最公开的活动和满足的基本条件,意思是:

  1. 会议至少有一个私人活动。
  2. 会议至少有5次公开活动。
  3. 应根据过去10天计算

我不确定是应该直接查询Conference对象还是查询Event对象,而不是使用event.conference筛选适当的会议

效率很重要,因此,如果可能的话,可以使用获取限制或其他优化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-23 18:22:23

您可以使用SUBQUERY在单个提取请求中执行此操作:

代码语言:javascript
复制
 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)。在这种情况下,您应该在获取之后对结果进行排序和限制。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21968032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档