我正在使用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;
}
它将显示所有" 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。谢谢。
答案 0 :(得分:1)
目前无法通过Firebase中的多个子键进行查询。我建议两个可能的解决方案:
第一个解决方案:展平数据库结构。
说明:而不只是一个" jadwal"包含所有孩子的部分,实现这样的结构:
jadwal: {
"17/08/2016": {
harga:
},
"17/07/2016": {
harga:
}
}
然后,您可以根据哪个" tanggal"选择路径。过滤,然后由" harga"对孩子进行分类。值。
第二种解决方案:在客户端进行一些过滤
说明:您是使用orderBy(" harga")在jadwal中查询,然后在客户端的childAdded侦听器上过滤结果。这意味着您将检查孩子是否有预期的唐格。如果是,请将其添加到结果数组中。否则,转到下一个孩子。
如果您还有其他问题,请与我们联系。