2014-01-06 4 views
0

Stackmob SMQuery를 사용하고 4 OR 조건으로 쿼리를 만들고 모든 결과를 정렬하려고합니다. 내 코드는 아래와 같습니다. 내가 마지막 줄을 주석 경우 문제가Stackmob SMQuery OR 조건 : "OR 문 stackmob에 정렬을 사용할 수 없습니다."

 SMQuery *query = [[SMQuery alloc] initWithSchema:STACKMOB_SCHEMA_TESTIMONIAL]; 

     [query where:@"friend_id" isIn:[friendFacebookIds arrayByAddingObject:[KKKeychain getStringForKey:@"facebookId"]]]; 

     // WHERE (privacy == Public OR (privacy == Private AND friend_id == myFacebookId) OR (privacy == Restricted AND myFacebookId NOT IN restricted_Ids)) 

     SMQuery *subQuery0 = [[SMQuery alloc] initWithSchema:STACKMOB_SCHEMA_TESTIMONIAL]; 
     SMQuery *subQuery1 = [[SMQuery alloc] initWithSchema:STACKMOB_SCHEMA_TESTIMONIAL]; 
     SMQuery *subQuery2 = [[SMQuery alloc] initWithSchema:STACKMOB_SCHEMA_TESTIMONIAL]; 
     SMQuery *subQuery3 = [[SMQuery alloc] initWithSchema:STACKMOB_SCHEMA_TESTIMONIAL]; 

     [subQuery0 where:@"privacy" isEqualTo:nil]; // just in case no privacy was set, assume it is public 
     [subQuery0 orderByField:@"createddate" ascending:NO]; 

     [subQuery1 where:@"privacy" isEqualTo:[NSNumber numberWithInt:TTPrivacyLevelPublic]]; 
     [subQuery1 orderByField:@"createddate" ascending:NO]; 

     [subQuery2 where:@"privacy" isEqualTo:[NSNumber numberWithInt:TTPrivacyLevelPrivate]]; 
     [subQuery2 where:@"user_id" isEqualTo:[KKKeychain getStringForKey:@"facebookId"]]; // for private post, I can only see posts that were created by me 
     [subQuery2 orderByField:@"createddate" ascending:NO]; 

     [subQuery3 where:@"privacy" isEqualTo:[NSNumber numberWithInt:TTPrivacyLevelRestricted]]; 
     [subQuery3 where:@"restricted_user_ids" isNotEqualTo:[KKKeychain getStringForKey:@"facebookId"]]; // make sure I'm not restricted to see 
     [subQuery3 orderByField:@"createddate" ascending:NO]; 

     // combine subquery to main query 

     [query and:[[[subQuery1 or:subQuery2] or:subQuery3] or:subQuery0]]; 

     [query orderByField:@"createddate" ascending:NO]; 
     .... 

그래서이다 "[쿼리 orderByField : @"createddate "상승 : NO];"없다 다음 그것은 잘 작동합니다. 그러나 결과는 생성 된 순서로 정렬되지 않은 4 개의 다른 데이터 세트의 조합이됩니다. 또한 각 하위 쿼리를 정렬하려고했지만 그 결과도 올바르지 않습니다. 왜냐하면 각 하위 쿼리 내에서만 정렬되어 다른 결과와도 결합되지 않기 때문입니다.

감사합니다.

답변

0

데이터베이스는 OR 및 정렬을 모두 포함하는 쿼리 실행을 지원하지 않습니다. 이는 데이터베이스 제한 사항입니다. 대신에 StackMob에서 쿼리를 수행 한 다음 sortedArrayUsingComparator 또는 비슷한 것을 사용하여 createddate로 결과를 로컬로 정렬하십시오.

+0

감사합니다. Btw Stackmob이 종료되었습니다. 이야기의 끝. – thkeen