2013-02-10 1 views
4

내 앱에서 4 가지 가장 인기있는 제품을 나열하려고합니다.
제품의 인기는 주문량의 총량에 의해 결정됩니다.NSFetchRequest sum, group by and sorting

// Create an expression to sum the order quantity 
NSExpressionDescription *sumExpression = [[NSExpressionDescription alloc] init]; 
sumExpression.name = @"sumQuantity"; 
sumExpression.expression = [NSExpression expressionWithFormat:@"@sum.%K", OrderAttributes.quantity]; 
sumExpression.expressionResultType = NSInteger32AttributeType; 

// Create the fetch request 
NSFetchRequest *request = [Order createFetchRequest]; 
request.resultType = NSDictionaryResultType; 
request.propertiesToFetch = @[OrderRelationships.product, sumExpression]; 
request.propertiesToGroupBy = @[OrderRelationships.product]; 
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:sumExpression.name ascending:NO]]; 
request.fetchLimit = 4; 
: 아래 코드는 내 방식 내 핵심 데이터 모델에 대한 가져 오기 요청을 얻기에

SELECT  TOP 4 SUM(quantity) as sumQuantity, Product 
FROM  [Order] 
GROUP BY Product 
ORDER BY 1 DESC 

입니다 :

아래 쿼리는 내가 할 노력하고있어 설명하기 위해

입니다

내 문제는 sortDescriptor, 그것은 단지 Order (app 예외)의 직접 속성을 허용하는 것 같다.
정렬은 매우 중요합니다. 반환되는 네 개의 레코드를 결정하기 때문입니다.

참고 : MagicalRecord 및 Mogenerator를 사용하고 있습니다. 클래스 접두사를 제거했습니다.

답변

3

불행히도 NSSortDescriptor은 동적으로 계산 된 필드가 아닌 실제 속성을 정렬하려고합니다. 상황에 따라 모델 자체에 필요한 카운터를 저장하고 정렬하거나 전체 그래프를 가져 와서 메모리에 정렬 할 수 있습니다.

+0

제품의 카운터를 추적하는 것은 실제로 나를위한 옵션이 아닙니다. 나는 서버와 동기화되어서 신맛이 나고 일관성이 없다. 이것은 상당히 큰 한계입니다. 그래도 도와 ​​줘서 고마워. – Zyphrax