2013-02-13 91 views
0

我试图寻找我的核心数据的数据库,并返回一个非常具体的记录集。复杂的核心数据搜索

我的模型看起来是这样的:

firstName (NSString) 
lastName (NSString) 
dateOfBirth (NSDate) 
updatedAt (NSDate) 
weight (NSNumber) 
height (NSNumber) 

我想用独特的firstNamelastNamedateOfBirth值用户的列表,但只有最新的返回每个用户的全记录updatedAt值。

因此,对于数据库,如:

firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100 
firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 2/1/2012, weight: 120, height: 100 
firstName: Joe, lastName: Smith, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100 
firstName: Joe, lastName: Smith, dateOfBirth: 2/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100 

我会得到一个数组:

firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 2/1/2012, weight: 120, height: 100 
firstName: Joe, lastName: Smith, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100 
firstName: Joe, lastName: Smith, dateOfBirth: 2/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100 

我知道我可以跑来跑去执行一大堆不同的过滤操作,但是我在想,如果有任何“捷径”可以帮助这一点。我可以用[fetchRequest setReturnsDistinctResults:YES],如果我没有兴趣在得到updatedAt值,但这基本上是返回所有的记录,如果我包括属性获取updatedAt。我担心整个数据库加载到一个NSArray因为它可能是非常大(> 10,000条记录)。

回答

0

首先,我想你应该修改你的数据模型。名字,姓氏和出生日期只是没有足够的可靠替代唯一的ID(满分记录10.000s)。

其次,您应该创建一个Person实体并使用该实体的相同记录与某种携带updated date属性的事件关联。

有了这个更健壮的结构,您的查询变得微不足道。你只需抓取所有人。如果需要,可以为每个人选择最近的事件。

Event *latestEvent = [person.events [email protected]"@max.updated"];