使用iOS Swift提前查询和过滤Firebase
我正在使用Firebase数据库构建购票应用程序。这里是我的数据库格式: 使用iOS Swift提前查询和过滤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)
它会显示所有的“价格”从低责令高这样的:
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;
}
看到“价格”排序 但我需要显示快照,显示“价格”的列表进行排序和只有“tanggal”是“17/08/2016”。 我总是无法做到这一点,主要与“多orderBy()”错误,我需要查询和过滤数据基于两个或更多的孩子值。基本上我想基于“harga”进行排序,基于“tanggal”,“asal”,“tujuan”以及“tersedia”的最小数量进行过滤 请帮助我,我想将我的db从SQL切换到Firebase。谢谢。
目前无法通过Firebase中的多个子键查询。我会建议两个可能的解决方案:
第一个解决方案:压扁你的数据库结构。
说明:不是只是一个“jadwal”所有的儿童区,需要实现这样的结构:
jadwal: {
"17/08/2016": {
harga:
},
"17/07/2016": {
harga:
}
}
然后,您可以根据该“tanggal”通过过滤选择路径,然后按照“harga”的价值对孩子进行分类。
解决方法二:做一些过滤在客户端
说明:您使用排序依据(“价格”)在jadwal查询,然后在客户端上的childAdded听众,筛选结果。这意味着你会检查孩子是否有预期的tanggal。如果有,请将其添加到结果数组中。否则,转到下一个孩子。
让我知道你是否还有其他问题。
你能解释我更多关于扁平化我的数据库结构吗?我还没弄明白。谢谢。 – chronycles
您只能在Firebase查询中使用一个'orderBy'子句。有时你可以将你想要在单个属性中过滤/排序的值组合起来,但这取决于你的确切用例。请参阅http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase –