2016-04-07 56 views
1

我幾乎可以肯定,我的問題沒有解決方案只使用firebase,但讓我試試。 我必須得到一個特定的節點來排序它的另一個值,更好地解釋:我必須讓所有的孩子「empregado」按「數據」排序。 這是我的數據:Firebase等於一個屬性和orderBy另一個

"ponto" : { 
"-KEggOdWvibrLfpptyfX" : { 
    "data" : "04/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:03", 
    "entradaT" : "12:01", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP", 
    "horas" : "09:00", 
    "horas100" : "", 
    "horas50" : "", 
    "obra" : "-KDcuiLXj8IgVB5RalLS", 
    "observacao" : "tsts", 
    "saidaM" : "11:01", 
    "saidaT" : "17:00" 
}, 
"-KEggYHd7bBkv04XSx2C" : { 
    "data" : "05/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:01", 
    "entradaT" : "12:02", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP", 
    "horas" : "09:00", 
    "horas100" : "", 
    "horas50" : "01:00", 
    "obra" : "-KDcuiLXj8IgVB5RalLS", 
    "observacao" : "tsts", 
    "saidaM" : "11:01", 
    "saidaT" : "18:00" 
},...more data with repeated key "empregado" and not repeated too 

所以,我所做的:

ref.child("ponto").orderByChild("empregado").equalTo("-KEHl6qtSG7UkZU8Gi4t").on("child_added", function(snapshot) { 
         ponto = snapshot.val();}); 

和完美的我得到的數據,但我需要孩子來訂購吧「數據」,所以我想這可能是通過這樣的事情來解決:

ref.child("ponto").orderByChild("data").orderByChild("empregado").equalTo("-KEHl6qtSG7UkZU8Gi4t").on("child_added", function(snapshot) { 
         ponto = snapshot.val();}); 

但它說我不能使用兩次「orderByChild」 想法? 從此開始感謝。

+0

查看http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase –

回答

0

你是對的,你的orderByChild定義你正在查詢哪個字段,所以它不能被使用兩次。

此外,使用日期像2016年4月4日可能會成爲以後排序的問題,所以你可能需要將它們保存爲20160404.

沒有指定你的開發平臺,但數據可以在加載和在代碼中很容易訂購。

作爲一個解決方案,你可以利用一個組合索引

"-KEggOdWvibrLfpptyfX" : { 
    "data" : "04/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:03", 
    "entradaT" : "12:01", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP" 
    "id_date_index": "-KDYYDYMqc0l0irnOGjP_20160404" 
}, 
"-KEggYHd7bBkv04XSx2C" : { 
    "data" : "05/04/2016", 
    "empregado" : "-KEHl6qtSG7UkZU8Gi4t", 
    "entradaM" : "07:01", 
    "entradaT" : "12:02", 
    "equipe" : "-KDYYDYMqc0l0irnOGjP" 
    "id_date_index": "-KDYYDYMqc0l0irnOGjP_20160504" 
} 

那麼你的查詢是

ref.queryOrderedByChild("id_date_index").queryStartingAtValue("-KDYYDYMqc0l0irnOGjP_0") 
     .observeEventType(.ChildAdded, withBlock: { snapshot in 

     if (snapshot.value is NSNull) { 
      print("not found)") 

     } else { 
      print(snapshot.value) 
     } 

    }) 

這裏的概念是,我們知道我們想要什麼來查詢,在這個情況是「-KDYYDYMqc0l0irnOGjP_0」,因此它是靜態的。

變量是日期,所以我們手藝,結合靜態與可變

static_variable

一個指數自變量是數字,可以是連續的,我們在零與queryStartingAt開始我們的查詢:

-KDYYDYMqc0l0irnOGjP_0

然後它將檢索所有需要的節點,並按順序對它們進行排序。

+0

非常感謝你弗蘭克 – Jorgeley