0

ユーザーを含むチャットルーム クラスがあります。そのクラスを正常にクエリして、特定の PFUsers のみを返すことができます。

        // get all room IDs associated with current user
    var outerRoomQuery = PFQuery(className:Parse.CHATROOM_CLASS_NAME)
    outerRoomQuery.whereKey(Parse.CHATROOM_USER, equalTo: PFUser.currentUser()!)
    outerRoomQuery.selectKeys([Parse.CHATROOM_ROOMID])

    // get all users associated with above roomIds ignoring current User
    var innerRoomQuery = PFQuery(className:Parse.CHATROOM_CLASS_NAME)
    innerRoomQuery.whereKey(Parse.CHATROOM_ROOMID, matchesKey:Parse.CHATROOM_ROOMID, inQuery: outerRoomQuery)
    innerRoomQuery.whereKey(Parse.CHATROOM_USER, notEqualTo: PFUser.currentUser()!)
    innerRoomQuery.includeKey(Parse.CHATROOM_USER)
    innerRoomQuery.orderByDescending(Parse.CHATROOM_UPDATEDACTION)
    innerRoomQuery.selectKeys([Parse.CHATROOM_USER])

上記のクエリは、約 5 人のユーザーを返します。これらの結果を別の PFUser.query() と組み合わせて、次のような OR クエリを作成できるかどうか疑問に思っています。

     var userQuery = PFUser.query()
    userQuery?.whereKey(Parse.CHATROOM_USER, matchesKey:Parse.CHATROOM_USER, inQuery: innerRoomQuery) // returns nil

    var receptionQuery = PFUser.query()
    receptionQuery?.whereKey(Parse.USER_ROLE, equalTo:Parse.PFROLE_RECEPTIONIST) // returns around 10 receptionist users

    var orUserQuery = PFUser.query()
    return PFQuery.orQueryWithSubqueries([userQuery!, receptionQuery!])

上記の結果は、受付のみを返します。だから私の質問は、この行を達成する方法です: userQuery?.whereKey(Parse.CHATROOM_USER, matchesKey:Parse.CHATROOM_USER, inQuery: innerRoomQuery)

PFUser クラスに「ユーザー」(Parse.CHATROOM_USER) フィールドがないため、これが間違っていることはわかっています。最初にroomQueryを起動して返されたPFUsersを配列に入れてから、受付ユーザーのクエリを起動して配列を結合することなく、これを行う方法があるかどうか疑問に思っています。

何か案は?

4

1 に答える 1

0

あなたが何を求めているのか完全にはわかりませんが、単一のクエリで特定のタイプのユーザーを見つけようとしている場合は、別の方法でこれにアプローチします。検索対象のユーザー クラスに bool 型を追加し、その bool 型を持つすべてのユーザーを true としてクエリします。

于 2015-06-01T19:24:58.460 に答える