我有一个名为table 1的表,其中包含一个名为parent field的字段,其中包含表2的object(Objectid)。现在我不想获取重复的objectId并按升序排列它们。这是表格的数据。
Table1
parentfield(id)
790112
790000
790001
790112
790000
790001
现在结果将是前三个元素,但我不知道id匹配的数量。有没有办法做到这一点?
答案 0 :(得分:5)
不幸的是,Parse中没有SELECT DISTINCT / GROUP BY操作。
请参阅此主题:https://parse.com/questions/retrieving-unique-values
建议的团队解决方案:
没有可以返回不同值的内置查询约束 基于专栏。
作为一种变通方法,您可以查询所有行,然后迭代 它们并跟踪所需列的不同值
所以,悲伤,糟糕,可怕的想法是创建一个获取所有可能元素的云函数(请记住,Parse允许您为每个查询获取最多1000个元素),然后从中删除重复项结果清单。您可以在云代码功能上执行此操作,然后将已清理的列表返回给客户端,也可以直接在客户端设备上执行此操作。所有这些意味着如果你想在这种情况下检索真正的选择不同的等价物,你应该首先获取所有元素(一个查询循环,一次检索1000个项目),然后应用你的自定义算法来删除重复项。我知道,考虑到Parse云功能执行的超时限制为7-10秒这一事实,它真的很长而且令人沮丧。也许转到Parse后台作业,你可以填充一个不同的临时表,因为你应该在超时之前执行最多15分钟。
另一个极端的解决方案是将数据移动到另一台支持ER数据库的服务器上(比如在Openshift上,保留一个免费的层),并且通过一些Parse后台作业,您可以将元素从解析同步到ER db,所以你将客户端请求重定向到ER db而不是Parse。
希望有所帮助
答案 1 :(得分:0)
我有一个具有类似要求的应用程序,只显示一次公司名称及其拥有的项目数
这是我在客户端(swift 3)实现解决方案的方式,我的数据库相对较小:
var companyItemsCount = [Int: Int]() // stores unique companyId and number of items (count)
query.findObjectsInBackground(block: { (objects: [PFObject]?, error: Error?) in
var companyId: Int = 0
if error == nil {
// The find succeeded.
// Do something with the found objects
if let objects = objects {
for object in objects {
companyId = object["companyId"] as! Int
if self.companyItemsCount[companyId] == nil {
self.companyNames.append(object["companyName"] as! String)
self.companyIds.append(object["companyId"] as! Int)
self.companyItemsCount[companyId] = 1
}else{
self.companyItemsCount[companyId]! += 1
}
self.tableView.reloadData()
}
}
} else {
// Log details of the failure
print("Error: \(error!) \(error!.localizedDescription)")
}
})
self.tableView.reloadData()