ios - 使用 firebase 搜索用户订单并按日期排序(最新的优先)
问题描述
在我的 iOS 应用程序中,我想显示处于活动状态的用户的订单,并希望按 (CreateDate) 对它们进行排序以显示最新的第一
我正在使用此代码,它只显示用户订单而不按日期排序
if (Auth.auth().currentUser != nil) {
let user = Auth.auth().currentUser
if let user = user {
uid = user.uid
print("uid = \(uid)")
// get order details
let ordersRef = rootRef.child("orders")
ordersRef.queryOrdered(byChild: "clientuid_status").queryEqual(toValue: "\(uid)_0").observe(.childAdded, with: { (snapshot) -> Void in
let snabshotvalue = snapshot.value as? [String : AnyObject]
let dateorder = snabshotvalue!["orderDate"]
let tecname = snabshotvalue!["tecname"]
let theproblem = snabshotvalue!["theproblem"]
let homeadress = snabshotvalue!["homeadress"]
let clintlat = snabshotvalue!["clintlat"]
let clintlong = snabshotvalue!["clintlong"]
let clintuid = snabshotvalue!["clintuid"]
let tecuid = snabshotvalue!["tecuid"]
let tecToken = snabshotvalue!["tecToken"]
let status = snabshotvalue!["status"]
let servicetable = snabshotvalue!["servicetable"]
let snashotkey = snapshot.key as String
print("firstname: \(tecname) ")
self.dateArray.append(dateorder as? String)
self.tecnameArray.append(tecname as? String)
self.problemArray.append(theproblem as? String)
self.homeadressArray.append(homeadress as? String)
self.clintlatArray.append(clintlat as? String)
self.clintlongArray.append(clintlong as? String)
self.tecuidArray.append(tecuid as? String)
self.tecTokenArray.append(tecToken as? String)
self.orderuidArray.append(snashotkey )
self.clintidArray.append(clintuid as? String)
self.statusArray.append(status as? String)
self.servicetableArray.append(servicetable as? String)
self.getTechRatin(teckUid: tecuid as! String)
self.tableView.reloadData()
})
}
我收到了 Firebase 支持的票,他们告诉我使用此代码:
let orderOrdersByCreatedDate= (ref.child("orders").child(getUid())).queryOrdered(byChild: "createDate").queryLimited(toLast: 1)
当我尝试使用您的代码时,我收到此错误:使用未解析的标识符“getUid”
我不知道如何使用 getUid()
解决方案
最后一段代码是错误的。creadeDate
要按您需要的顺序对订单进行排序:
ordersRef.queryOrdered(byChild: "creadeDate").observe(.childAdded, ...
但是 Firebase 数据库查询只能对单个属性进行排序/过滤,这意味着您不能再clientuid_status
像现在那样进行过滤。
在许多情况下,可以将要过滤的值组合成一个(合成)属性。您似乎已经使用 完成了此操作clientuid_status
,并允许对其进行过滤和按日期排序,您将其扩展为clientuid_status_creadeDate
并对其进行排序/过滤。
有关此方法和其他方法的示例,请在此处查看我的答案:http ://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase
推荐阅读
- excel - 为 AGGREGATE 公式查找关联单元格以确定列的顶部差异
- umbraco - 无法登录管理页面 umbraco 后台
- python - 用于可视化循环 ETA 的进度条
- bash - bash 如何处理不匹配的通配符?
- azure-devops - 在 Azure DevOps 中显示上周的项目
- node.js - 错误:在 window10 上找不到模块“../lib/utils/unsupported.js”
- python - 如何使用熊猫格式化excel单元格?
- python - /password-reset/ 处的 ConnectionRefusedError [WinError 10061] 无法建立连接,因为目标计算机主动拒绝它
- linux - 在低内存嵌入式系统中使用 Busybox 有什么意义
- python - 如何将列表中的空项目更改为 N/a 值?