2

私は 2 つのクエリを持っています。1 つは friendsrequestQuery で、もう 1 つはユーザー クエリです。ユーザー クエリからデータをフェッチしながら、friendrequestQuery の詳細のすべてのデータをユーザー クエリに追加したいと考えています。

NSPredicate *predicate12=[NSPredicate predicateWithFormat:@"((UserFriendId == %@ )AND (UserId!=%@)) OR ((UserFriendId != %@ )AND (UserId==%@)) ",@"Nwk44aeSrz",@"Nwk44aeSrz",@"Nwk44aeSrz",@"Nwk44aeSrz"];
PFQuery *innerQuery = [PFQuery queryWithClassName:@"FriendsDetails" predicate:predicate12];
[innerQuery whereKey:@"BlockStatus" equalTo:@"No"];
PFQuery * userQuery = [PFUser query];

[userQuery whereKey:@"objectId" matchesKey:@"UserFriendId" inQuery:innerQuery];
[userQuery whereKey:@"objectId" matchesKey:@"UserId" inQuery:innerQuery];

[userQuery whereKey:@"objectId" notEqualTo:@"Nwk44aeSrz"];

私は正確に何が必要かを説明します。内部クエリ テーブルには 10 列ありますが、ユーザー クエリのデータを取得する際に、これらの特定の列データ converstionid、lastmessage、lastdate のデータが必要です。今、私は userquery の詳細を取得していますが、innerquery の詳細を取得していないため、 Innerquerydetails の詳細が必要です。私を助けてください 。

4

1 に答える 1

0

Id ではなくポインターを保存する方がよいと思います。この方法で、そのデータも含めることができます。

述語は使用しません。述語を使用すると、クエリがよりクリーンになりますが、これを使用するとロジックが見やすくなると思います。自分で述語に戻すことができます。

// get your user
PFUser * userForQuery; // set up your user for the query, if it's current user, = [PFUser currentUser];

// first part of predicate
PFQuery * innerQueryA = [PFQuery queryWithClassName:@"FriendsDetails"];
[innerQueryA whereKey:@"UserFriend" equalTo:userForQuery]; // from  @"UserFriendId"
[innerQueryA whereKey:@"User" notEqualTo:userForQuery]; // from @"UserId"

// second part of predicate
PFQuery * innerQueryB = [PFQuery queryWithClassName:@"FriendsDetails"];
[innerQueryB whereKey:@"userFriend" notEqualTo:userForQuery]; // from @"UserFriendId"
[innerQueryB whereKey:@"user" equalTo:userForQuery]; // from @"UserId"

// combine
PFQuery * query = [PFQuery orQueryWithSubqueries:@[innerQueryA, innerQueryB]];
[query whereKey:@"BlockStatus" equalTo:@"No"];

// Now, as you remember, we are storing a pointer in @"User" as opposed to an id @"UserId" as you had it. Because of     
// this, we will use parse's includeKey: feature.

[query includeKey:@"User"]; // tells the query to include the data associated with these keys;

NSMutableArray * usersRetrieved = [[NSMutableArray alloc]init];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {    
        // objects will contain all of your objects
        for (PFObject * object in objects) {
            [usersRetrieved addObject:object[@"User"]]; // all the data should be available for the @"User" object
        }

        // objects will contain all the @"friendDetails" objects
        // usersRetrieved will contain all the @"User" objects
    }
    else {
    }
}];

これによりデータ構造が少し変更されることは理解していますが、必要なすべてのデータが得られるはずです。

于 2014-02-02T17:50:01.490 に答える