Firebase查询排序无法正常工作

时间:2016-05-11 22:26:36

标签: swift firebase tableview firebase-realtime-database

基本上我在过去一周玩过Firebase,最近我偶然发现了查询订单,但是我最近发现了' queryOrderedByChild()'据我所知 - 允许您对firebase中的数据进行排序。但是,我似乎没有得到正确的结果。我的Firebase数据如下所示:

{
  "names" : {
    "-KHVUwXdVPHmrO_O5kil" : {
      "id" : "0",
      "name" : "Jeff"
    },
    "-KHVV7lCeac0cZNMi9fq" : {
      "id" : "3",
      "name" : "Stig"
    },
    "-KHVVCjXgl0XxasVOHF1" : {
      "id" : "13",
      "name" : "Ali"
    },
    "-KHVVJtyUO-yJZiompJO" : {
      "id" : "7",
      "name" : "Hannah"
    },
    "-KHVVR8tMSO1Oh7R8tR1" : {
      "id" : "2",
      "name" : "Amanda"
    }
  }
}

,我的代码如下:

ref.childByAppendingPath("names")
   .queryOrderedByChild("id")
   .observeEventType(.ChildAdded) { (snapshot:FDataSnapshot!) in
       if let myID = snapshot.value["id"] as? String {
           print(myID)
       }

输出仍然是随机顺序,显示:0,2,7,1,8,4 - 这不应该是数字吗?我究竟做错了什么?我如何对其进行排序以使其数字升序或降序?

2 个答案:

答案 0 :(得分:2)

您说您按号码排序,但id属性的值存储为字符串。

由于您将它们存储为字符串,因此它们将在lexicographical order中返回。

如果您希望它们按数字顺序排列,则应将它们存储为数字

"-KHVUwXdVPHmrO_O5kil" : {
  "id" : 0,
  "name" : "Jeff"
},

或者,您可以将ID存储为零填充字符串:

{
  "names" : {
    "-KHVUwXdVPHmrO_O5kil" : {
      "id" : "0000",
      "name" : "Jeff"
    },
    "-KHVV7lCeac0cZNMi9fq" : {
      "id" : "0003",
      "name" : "Stig"
    },
    "-KHVVCjXgl0XxasVOHF1" : {
      "id" : "0013",
      "name" : "Ali"
    },
    "-KHVVJtyUO-yJZiompJO" : {
      "id" : "0007",
      "name" : "Hannah"
    },
    "-KHVVR8tMSO1Oh7R8tR1" : {
      "id" : "0002",
      "name" : "Amanda"
    }
  }
}

由于字符串的长度都相同,因此它们将按正确的顺序排序。但是你必须在后一个解决方案中决定字符串/最大id值的长度,所以看起来更糟。

答案 1 :(得分:0)

如果您按孩子使用订单,则需要订购ASTextInputAccessoryView,否则您无法触及其价值。

那么也许你必须尝试像

这样的东西
  • (FIRDatabaseQuery *)queryOrderedByValue
    queryOrderedByValue:用于生成对按子值排序的数据视图的引用。