当我在我的项目中使用 Core Data 时,我需要编写一个本地 SQL 查询。我真的需要这样做,因为我现在正在使用 NSPredicate 并且它不够高效(仅在一个案例中)。我只需要编写几个子查询和连接来获取大量行并按特殊字段对它们进行排序。特别是,我需要按其子实体的值总和对其进行排序。现在我正在使用 NSPredicate 获取所有内容,然后我手动对我的结果(数组)进行排序,但这花费的时间太长了,因为有成千上万的结果。
如果我错了请纠正我,但我很确定这不会是一个巨大的挑战,因为有一种在 iOS 应用程序中使用 sqlite 的方法。
如果有人能引导我走向正确的方向,那就太棒了。
提前致谢。
编辑:
让我解释一下我在做什么。
这是我的 Coredata 模型:
这是我的结果在 iPad 上的样子:
我正在显示一个表格,每个客户一行,每个客户都有他在 2012 年 1 月至 6 月(最后)和 2013 年(当前)的销售额。 Curr 旁边是这两个值之间的差异。毛利率和覆盖率也是一样。
每个客户都保存在 Kunde 表中,每个 Kunde 都有几个 PbsRow 。 PbsRow 实际保存的是每个月的销售额总和。
因此,为了显示这些结果,我正在做的是获取 2013 年 1 月至 6 月之间的所有 PbsRows ,然后执行此操作:
self.kunden = [NSMutableOrderedSet orderedSetWithArray:[pbsRows valueForKeyPath"kunde"]];
现在我有所有在 2013 年 1 月到 6 月之间有记录的客户 (Kunde)。
然后我使用 for 循环来计算每个客户的总和。
想法是获取当年的销售额并将其与去年进行比较。
糟糕的是有很多客户,for -loop 只需要很长时间:-(
Best Answer-推荐答案 strong>
这有点像 hack,但是... SQLite 库能够在给定时间打开多个数据库文件。直接用 SQLite 打开核心数据数据库文件(只读/只读)并打开第二个文件(报告/临时表)是非常可行的。然后可以对 Core Data DB 中的数据执行直接 SQL 查询,并将它们保存到第二个文件中(如果需要持久化)。
这种事情我做过几次。 SQLite 库中有一些功能(例如:全文搜索引擎)未通过 Core Data 公开。
关于ios - 在 Core Data 中编写原生 SQL,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/18511046/
|