2012-10-25 4 views
0

코어 데이터에 노래 엔티티 및 장르 엔티티가 있다고 가정합니다. 장르에는 많은 노래가 있습니다.모든 코어 데이터 하위 항목 가져 오기

모든 노래의 장르를 가져 오기 위해 가져 오기 요청을 수행하려고합니다. 이것은 장르가 여러 번 나타날 것임을 의미합니다. 또는,

select G.* 
    from Songs S 
     join Genres G on G.id = S.genre_id 

, SQL 측면에서 나는 차/외래 키를 필요로하지 않기 때문에 SQL 동등한은 약간의 신축성을 실감. 목표는 동일합니다. 그것은 간단 해 보이지만 내 연구에서 내 문제에 상당히 적합한 답을 찾을 수 없었습니다.

궁극적 인 목표는 장르를 집계하고 집계하는 것입니다 (like in this post). 다시, SQL 측면에서 : 나는이 질문의 이해, 내가 원하는 것을 얻을 링크의 코드를 추가 할 수 바라고 있어요

select G.name, count(*) 
    from Songs S 
     join Genres G on G.id = S.genre_id 
group by G.name 

. CD가 그렇게 작동하지 않으면 작동하지 않는다고 말해도됩니다.

답변

0

핵심 데이터 모델에서 각 장르는 노래와 일대일 관계가 있다고 가정하면 다음은 각 장르의 노래 수를 제공합니다 (실제 장르를 집계하여 계산합니다). 장르 최소 1 곡에 붙어 있습니다 :

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY songs != NULL"]; 
NSEntityDescription *genres = [NSEntityDescription entityForName:@"Genre" 
              inManagedObjectContext:moc]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:genres]; 
[request setPredicate:predicate]; 
NSError *error; 
NSArray *genresArray = [moc executeFetchRequest:request error:&error]; 
NSLog(@"Total number of genres that have songs: %d", genresArray.count); 
for (NSManagedObject *genre in genresArray) { 
    NSLog(@"Genre: %@ (%@)", [genre valueForKey:@"genreName"], [genre valueForKeyPath:@"[email protected]"]); 
} 
0

NSPredicate가없는 "Genre"엔티티에 대한 NSFetchRequest를 만들지 않는 이유는 무엇입니까? 장르 인스턴스를 모두 가져옵니다. 아니면 노래가있는 장르 만 원하십니까? 그렇다면 here이라는 예를 찾을 수 있습니다.

+0

아니요. 당신이 제안하는 것은 저에게 모든 장르의 하나를 정확하게 줄 것입니다. 노래를 쿼리하지만 장르를 선택하면 각 장르가 사용 * 당 한 번 * 표시됩니다. – spamguy

관련 문제