2016-12-21 141 views
0

聲明:我對編碼和Firebase非常陌生。Swift Firebase訂購查詢

我的JSON樹是這個樣子:

 「MAIN LEAGUE「 : { 
       「Team Alpha「 : { 
        "Team Score" : 「50」, 
        "Total Time " : "02:22:05", 
        "Team Name" : 「Team Alpha「, 

         }, 
       「Team Bravo「 : { 
        "Team Score" : 「200」, 
        "Total Time" : "02:09:58", 
        "Team Name" : 「Team Bravo「 
        }, 
       「Team Charlie「 : { 
        「Team Score「 : 「150」, 
        "Total Time" : "02:16:50", 
        "Team Name" : 「Team Charlie「 
         } 
     } 

我想查詢數據庫,並提出了一種新的tableview從而使團隊由最高的「球隊得分」排名。

所以試圖表明,順序如下:

" Team Bravo" : "200" 
" Team Charlie" : "150" 
" Team Alpha" : "50" 

我有點失落。我試過了,無濟於事(下面的表格沒有任何回報):

struct content { 
     var sTitle : String! 
     var sValue : Any! 

     init(sTitle: String, sValue: Any) { 
      self.sTitle = sTitle 
      self.sValue = sValue 
     } 
    } 

    var dbHandleQuery: FIRDatabaseHandle? 

    var dbrefString = (myDatabasePath)// this is the database path to the correct child 
    ("MAIN LEAGUE") 

      dbHandleQuery=FIRDatabase.database().reference().child(dbrefString).queryOrdered(byChild: "Team Score").observe(.value, with: {(snapshot) in 

    var newContent : [content] = [] 
      for snap in snapshot.children.allObjects as! [FIRDataSnapshot] { 

       let title = snap.key as String 
       let message = snap.value as? String 
       print(snap.key) 
       print(snap.value as Any) 
       newContent.append(content(sTitle: title, sValue: message as Any)) 
       self.myTableView.reloadData() 
      } 
      self.cellContent = newContent 
      self.myTableView.reloadData() 
     }) 

我怎麼能達到那個排名呢?或者,嘗試在本地數組中加載所有內容然後嘗試從那裏對它們進行排名會更好?任何幫助,非常感謝!

更新:所以上面確實排名他們正確,但我的表只檢索團隊名稱,我不能提取「總分」放到我的tableview單元格第二個標籤(它有2個標籤,1個團隊名稱,總分數爲1)。

所以現在看起來是這樣的:

" Team Bravo" 
" Team Charlie" 
" Team Alpha" 

我怎麼能把旁邊的每一個分別對應總得分?非常感謝

回答

4

好吧不知道這是最好的答案,但我設法使它工作,並得到我想要的結果。

張貼幫誰可能遇到同樣的問題,任何人:

dbHandleQuery = FIRDatabase.database().reference().child(dbrefString).queryOrdered(byChild: "Team Score").observe(.value, with: {(snapshot) in 
     var counter = 0 
     var newContent : [content] = [] 
     for snap in snapshot.children.allObjects as! [FIRDataSnapshot] { 

      counter += 1 
      let title = snap.key as String 
      if let rankedBy = snap.value as? [String : Any] { 

      newContent.append(content(sTitle: "\(counter).\(title)", sValue: rankedBy["Team Score"] as Any)) 
       self.myTableView.reloadData() 
      } 
     } 
     self.cellContent = newContent 
     self.myTableView.reloadData() 
    }) 

這給了我

"1.Team Bravo" - "200" 
"2.Team Charlie" - "150" 
"3.Team Alpha" - "50" 
+1

確保你指數數據庫「球隊得分」如果你打算使用這段代碼。 Firebase文檔中有一個與您的代碼非常相似的示例:https://firebase.google.com/docs/database/security/indexing-data – DoesData