使用iOS Swift

时间:2016-08-19 20:00:03

标签: ios swift firebase firebase-realtime-database

我正在使用Firebase数据库构建售票应用。这是我的数据库格式: enter image description here

如果我写这样的代码:

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;
}

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

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。谢谢。

1 个答案:

答案 0 :(得分:1)

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

第一个解决方案:展平数据库结构。

说明:而不只是一个" jadwal"包含所有孩子的部分,实现这样的结构:

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

然后,您可以根据哪个" tanggal"选择路径。过滤,然后由" harga"对孩子进行分类。值。

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

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

如果您还有其他问题,请与我们联系。