2015-11-04 35 views
1

我正在爲我的數據存儲使用Parse SDK。在我的應用程序中,用戶可以評論某些內容。該應用程序還具有通知功能,通知您是否有其他人在您評論某事後對其進行評論,類似於Facebook。如(「約翰·史密斯還談到了Sally的鍛鍊」)在內部查詢中解析大於值

我的查詢如下:

ParseQuery<ParseObject> innerQueryCommentsAlso = ParseQuery.getQuery("Comment"); 
    innerQueryCommentsAlso.whereEqualTo("commentOwnerID", ParseUser.getCurrentUser().get("userID")); 


    ParseQuery<ParseObject> queryCommentsAlsoFinal = ParseQuery.getQuery("Comment"); 
    queryCommentsAlsoFinal.whereMatchesKeyInQuery("commentWorkoutID", "commentWorkoutID", innerQueryCommentsAlso); 
    queryCommentsAlsoFinal.whereNotEqualTo("commentOwnerID", ParseUser.getCurrentUser().get("userID")); 
    queryCommentsAlsoFinal.include("commentOwner"); 
    queryCommentsAlsoFinal.include("commentWorkout"); 
    queryCommentsAlsoFinal.include("commentWorkout.workoutOwner"); 
    queryCommentsAlsoFinal.orderByDescending("commentDate"); 

什麼,我需要做的,(或者願意做)是隻得到queryCommentsAlsoFinal評論發生在innerQueryCommentsAlso中的最後一條評論之後。該評論包含一個字段,其中包含時間戳值的註釋日期,因此比查詢要大,但我不確定這是否可能。在得到結果後,我可能會遇到一些算法,但由於Parse只允許從查詢中返回1000個結果,因此我想盡可能限制結果。

回答

0

你可以做的兩個步驟:

  1. 首先獲取當前用戶的最後一個註釋。
  2. 然後獲取所有者的最後評論後發生的所有評論。

ParseQuery<ParseObject> lastCommentQuery = ParseQuery.getQuery("Comment"); 
lastCommentQuery.whereEqualTo("commentOwnerID", ParseUser.getCurrentUser().get("userID")); 
lastCommentQuery.orderByDescending("commentDate"); 
lastCommentQuery.setLimit(1); 
lastCommentQuery.findInBackground(new FindCallback<Transaction>() { 
    @Override 
    public void done(List<Transaction> list, ParseException e) { 
     if (e != null) { 
      Date lastCommentDate = null; 
      if (list.size() == 1) { 
       lastCommentDate = list.get(0).getDate("commentDate"); 
      } 
      ParseQuery<ParseObject> queryCommentsAlsoFinal = ParseQuery.getQuery("Comment"); 
      if (lastCommentDate != null) { 
       queryCommentsAlsoFinal.whereGreaterThan("commentDate", lastCommentDate); 
      } 
      queryCommentsAlsoFinal.whereMatchesKeyInQuery("commentWorkoutID", "commentWorkoutID", innerQueryCommentsAlso); 
      queryCommentsAlsoFinal.whereNotEqualTo("commentOwnerID", ParseUser.getCurrentUser().get("userID")); 
      queryCommentsAlsoFinal.include("commentOwner"); 
      queryCommentsAlsoFinal.include("commentWorkout"); 
      queryCommentsAlsoFinal.include("commentWorkout.workoutOwner"); 
      queryCommentsAlsoFinal.orderByDescending("commentDate"); 

      //... execute queryCommentsAlsoFinal 
     } 
    } 
}); 
+0

謝謝你,我知道有一些簡單的我失蹤。這是一個長久以來很難在箱子外面去思考的例子。對你來說又是一個很快的問題,我試圖在API調用上留意,因爲它們可能很有價值,你知道內部查詢是否算作額外的API調用,即使我從不調用findInBackground函數? I.E.像我之前做的那樣? –

+0

如果您不在查詢對象上調用find()或findInBackground(...),它將不會與Parse服務器進行通信。它將只是一個查詢對象。 –