2015-05-27 34 views
0

我有一个表格,称为表格1,它包含一个名为父字段的字段,其中包含表格2的对象(Objectid)。现在我不想获取重复的objectId并将它们排列在升序的基础。这里是表格的数据。查询以获取具有唯一对象的行解析ios

Table1 
parentfield(id) 
790112 
790000 
790001 
790112 
790000 
790001 

现在的结果将是前三个元素,但我不知道ID的matched.Is的方式做到这一点的号吗?

回答

3

不幸的是,在Parse中没有SELECT DISTINCT/GROUP BY操作。

看到这个线程:https://parse.com/questions/retrieving-unique-values

建议团队解决方案:

有没有内置查询约束,将返回基于列不同的值 。

作为一种变通方法,您可以查询所有行,然后通过 迭代他们并跟踪不同的值所需的列

所以,可悲的,糟糕的,可怕的想法,是做一个Cloud函数可获取所有可能的元素(请记住,Parse允许您为每个查询最多获取1000个元素),然后从结果列表中删除重复项。您可以在Cloud代码功能上完成此操作,然后将已清除的列表返回给客户端,也可以直接在客户端设备上执行此操作。所有这一切意味着如果你想在这种情况下检索真正的选择不同的等价物,你应该首先获取所有元素(一个查询循环,在时间检索1000个项目),然后应用你的自定义算法去除重复项。我知道,考虑到解析云功能执行超时限制为7-10秒这一事实,这真的很漫长和令人沮丧。也许移动到Parse后台作业,您可以填充一个不同的临时表,因为在超时之前应该有15分钟的执行时间。

另一个激烈的解决方案是将数据移动到另一台支持ER数据库的服务器上(如在Openshift上保留一个空闲层)并使用一些Parse后台作业,将解析中的元素同步到ER数据库您将客户端请求重定向到ER分贝而不是分析。

希望它可以帮助

+1

哦~~好吧,我认为有一个更好的解决方案,然后迭代,但感谢的描述这个问题,现在我不用看别的地方为这个answer..Anyways感谢真棒和描述性解释。 – soldiershin

+0

@soldiershin不客气 –

+0

真的很伤心,他们没有包括明显的功能。希望他们能在不久的将来做到这一点。 – kalafun

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()