首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stackmob SMQuery OR conditioning:"Sort不能与OR语句一起使用stackmob“

Stackmob SMQuery OR conditioning:"Sort不能与OR语句一起使用stackmob“
EN

Stack Overflow用户
提问于 2014-01-06 14:39:01
回答 1查看 44关注 0票数 0

我正在使用Stackmob SMQuery,并尝试使用4个OR条件进行查询,并对所有结果进行排序。我的代码如下。问题是

代码语言:javascript
复制
        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];
        ....

因此,如果我注释了最后一行"query orderByField:@"createddate“createddate:NO;”,那么它工作得很好。但是,结果将是4个不同数据集的组合,而不是按创建顺序排序。我还尝试在每个子查询中排序,但结果也是不正确的,因为它们只在每个子查询中排序,而不是与其他结果组合。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-01-07 01:43:39

数据库不支持执行同时包含OR和排序的查询-这是数据库限制。相反,在StackMob上执行查询,然后使用sortedArrayUsingComparator或类似的方法按createddate对结果进行本地排序。

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

https://stackoverflow.com/questions/20944430

复制
相关文章

相似问题

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