【问题标题】:Advance Query and Filtering in Firebase using iOS Swift使用 iOS Swift 在 Firebase 中进行高级查询和过滤
【发布时间】:2016-08-19 20:00:02
【问题描述】:

我正在使用 Firebase 数据库构建票务应用。这是我的数据库格式:

如果我这样写代码:

let ref = FIRDatabase.database().reference()

    ref.child("jadwal")
        .queryOrderedByChild("tanggal")
        .queryEqualToValue("17/08/2016")
        .observeEventType(.ChildAdded, withBlock: { (snapshot) in

        print(snapshot)

    }, withCancelBlock: nil)

输出将是:

Snap (-KPMQefHSuk7j9kb3GTJ) {
   asal = BNA;
   harga = 177000;
   idBus = id;
   jam = "20:00";
   tanggal = "17/08/2016";
   tersedia = 35;
   tujuan = BRN;
}
Snap (-KPMQnCGrXY36NEMxSOU) {
    asal = BNA;
    harga = 150000;
    idBus = id;
    jam = "20:00";
    tanggal = "17/08/2016";
    tersedia = 37;
    tujuan = MDN;
}
Snap (-KPMQqFmku_XzItElzjV) {
    asal = BNA;
    harga = 160000;
    idBus = id;
    jam = "20:00";
    tanggal = "17/08/2016";
    tersedia = 40;
    tujuan = MDN;
}

它将显示所有值等于“17/08/2016”的“tanggal”, 当我这样做时......

let ref = FIRDatabase.database().reference()

    ref.child("jadwal")
        .queryOrderedByChild("harga")
        .observeEventType(.ChildAdded, withBlock: { (snapshot) in

        print(snapshot)

    }, withCancelBlock: nil)

它将显示从低到高排列的所有“harga”,如下所示:

Snap (-KPNgVeXXnqnzevh5w6u) {
     asal = BNA;
     harga = 120000;
     idBus = id;
     jam = "22:30";
     tanggal = "30/08/2016";
     tersedia = 38;
     tujuan = TKG;
}
Snap (-KPMQnCGrXY36NEMxSOU) {
    asal = BNA;
    harga = 150000;
    idBus = id;
    jam = "20:00";
    tanggal = "17/08/2016";
    tersedia = 37;
    tujuan = MDN;
}
Snap (-KPMQqFmku_XzItElzjV) {
    asal = BNA;
    harga = 160000;
    idBus = id;
    jam = "20:00";
    tanggal = "17/08/2016";
    tersedia = 40;
    tujuan = MDN;
}
Snap (-KPMQefHSuk7j9kb3GTJ) {
    asal = BNA;
    harga = 177000;
    idBus = id;
    jam = "20:00";
    tanggal = "17/08/2016";
    tersedia = 35;
    tujuan = BRN;
}
Snap (-KPNgJPRlEuu0FZvjU2J) {
    asal = BNA;
    harga = 180000;
    idBus = id;
    jam = "21:30";
    tanggal = "25/08/2016";
    tersedia = 40;
    tujuan = MDN;
}
Snap (-KPNgQ2qQXQpY4eT2Jqd) {
    asal = BNA;
    harga = 230000;
    idBus = id;
    jam = "22:30";
    tanggal = "30/08/2016";
    tersedia = 38;
    tujuan = BNJ;
}

查看“harga”是否已排序 但我需要显示快照列表,其中显示“harga”已排序,只有“tanggal”是“17/08/2016”。 我总是无法做到这一点,并且错误主要与“多个 orderBy()”有关,我需要根据两个或多个子值查询和过滤数据。基本上我想根据“harga”进行排序,根据“tanggal”、“asal”、“tujuan”和“tersedia”的最小数量进行过滤 请帮助我,我想将我的数据库从 SQL 切换到 Firebase。谢谢。

【问题讨论】:

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

目前在 Firebase 中无法通过多个子键进行查询。我会建议两种可能的解决方案:

第一个解决方案:扁平化您的数据库结构。

解释:不只是一个包含所有孩子的“jadwal”部分,而是实现这样的结构:

jadwal: {
    "17/08/2016": {
        harga:
    },
    "17/07/2016": {
        harga:
    }
}

然后,您可以根据“tanggal”选择过滤路径,然后按“harga”值对子项进行排序。

第二种解决方案:在客户端做一些过滤

说明:您是否在 jadwal 中使用 orderBy("harga") 进行查询,然后在客户端的 childAdded 侦听器上过滤结果。这意味着您将检查孩子是否有预期的 tanggal。如果是,请将其添加到结果数组中。否则,转到下一个孩子。

如果您还有其他问题,请告诉我。

【讨论】:

  • 你能解释一下关于扁平化我的数据库结构的更多信息吗?我还没有弄清楚。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 2021-05-12
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多