[Android] ParseQuery複雜條件

最近有個需求是使用ParseQuery下複雜條件的查詢,原本以為辦不到,後來細讀官方文件,沒想到自己居然試出來了,就先筆記下來。

先介紹ParseQuery的條件式,

In

篩選多筆資料使用 whereContainedIn ,類似SQL的In
String[] names = {"Jonathan Walsh", "Dario Wunsch", "Shawn Simon"};
query.whereContainedIn("playerName", Arrays.asList(names));

And

ParseQuery並沒有特定的交集And方法,只要將兩個條件式擺在上下行,就視同交集。當然和其他程式語言一樣。例如下面的例子,以SQL語法來說,就是 age > 20 and age <=50

// Restricts to age <= 50
query.whereLessThanOrEqualTo("age", 50);

// Restricts to age > 20
query.whereGreaterThan("age", 20);

OR

OR(聯集)方法比較複雜,需要先個別建立單獨的查詢,再將全部的查詢加入List,最後用  ParseQuery.or() 方法產生聯集的效果。例如下面的例子,以SQL語法來說,就是
ParseQuery<object> query1 = ArrayItem.getQuery();
query1.whereEqualTo("age", 20);

ParseQuery<object> query2 = ArrayItem.getQuery();
query2.whereEqualTo("age", 30);

ParseQuery<object> query3 = ArrayItem.getQuery();
query3.whereEqualTo("age", 40);
                          
List<ParseQuery<object>> queries = new ArrayList<ParseQuery<object>>();
queries.add(query1);
queries.add(query2);
queries.add(query3);

ParseQuery finalQuery = ParseQuery.or(queries);
根據以上的介紹,我希望查詢的條件是(A and B) or (C and D) or (E and F),該如何下ParseQuery呢?答案如下,見程式的註解,基本上滿直覺的,實際使用起來效率也不差。
ParseQuery<object> query1 = ArrayItem.getQuery();
query1.whereEqualTo("age", 20); //A and
query1.whereEqualTo("gender", "M"); //B

ParseQuery<object> query2 = ArrayItem.getQuery();
query2.whereEqualTo("age", 30); //C and
query2.whereEqualTo("gender", "F"); //D

ParseQuery<object> query3 = ArrayItem.getQuery();
query3.whereEqualTo("age", 40); //E and
query3.whereEqualTo("gender", "F"); //F 
                      
List<ParseQuery<object>> queries = new ArrayList<arseQuery<object>>();
queries.add(query1); // (A and B) or
queries.add(query2); // (C and D) or
queries.add(query3); // (E and F)

ParseQuery finalQuery = ParseQuery.or(queries);

相關文章

如何將電腦畫面經由 Chromecast 投放到電視螢幕上

Chrome 的檔案續傳功能

隱私權政策產生器 Privacy Policy Generator

使用 Vysor 在電腦上控制 Android 裝置